DataTemplateSelector.SelectTemplate(Object, DependencyObject) Methode

Definitie

Wanneer deze wordt overschreven in een afgeleide klasse, wordt een DataTemplate resultaat geretourneerd op basis van aangepaste logica.

public:
 virtual System::Windows::DataTemplate ^ SelectTemplate(System::Object ^ item, System::Windows::DependencyObject ^ container);
public virtual System.Windows.DataTemplate SelectTemplate(object item, System.Windows.DependencyObject container);
abstract member SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
override this.SelectTemplate : obj * System.Windows.DependencyObject -> System.Windows.DataTemplate
Public Overridable Function SelectTemplate (item As Object, container As DependencyObject) As DataTemplate

Parameters

item
Object

Het gegevensobject waarvoor u de sjabloon wilt selecteren.

container
DependencyObject

Het gegevensgebonden object.

Retouren

Geeft als resultaat een DataTemplate of null. De standaardwaarde is null.

Voorbeelden

In dit voorbeeld is de bindingsbron een lijst Task met objecten. Een van de eigenschappen van een Task object is Priority. Er zijn twee gegevenssjablonen gedefinieerd en myTaskTemplateimportantTaskTemplate.

Als u logica wilt opgeven om te kiezen welke DataTemplate u wilt gebruiken op basis van de Priority waarde van het gegevensobject, maakt u een subklasse van DataTemplateSelector en overschrijft u de methode SelectTemplate. In het volgende voorbeeld biedt de methode SelectTemplate logica om de juiste sjabloon te retourneren op basis van de waarde van de eigenschap Priority. De sjabloon die moet worden geretourneerd, vindt u in de resources van het omhullende Window element.

using System.Windows;
using System.Windows.Controls;

namespace SDKSample
{
    public class TaskListDataTemplateSelector : DataTemplateSelector
    {
        public override DataTemplate
            SelectTemplate(object item, DependencyObject container)
        {
            FrameworkElement element = container as FrameworkElement;

            if (element != null && item != null && item is Task)
            {
                Task taskitem = item as Task;

                if (taskitem.Priority == 1)
                    return
                        element.FindResource("importantTaskTemplate") as DataTemplate;
                else
                    return
                        element.FindResource("myTaskTemplate") as DataTemplate;
            }

            return null;
        }
    }
}

Namespace SDKSample
    Public Class TaskListDataTemplateSelector
        Inherits DataTemplateSelector
        Public Overrides Function SelectTemplate(ByVal item As Object, ByVal container As DependencyObject) As DataTemplate

            Dim element As FrameworkElement
            element = TryCast(container, FrameworkElement)

            If element IsNot Nothing AndAlso item IsNot Nothing AndAlso TypeOf item Is Task Then

                Dim taskitem As Task = TryCast(item, Task)

                If taskitem.Priority = 1 Then
                    Return TryCast(element.FindResource("importantTaskTemplate"), DataTemplate)
                Else
                    Return TryCast(element.FindResource("myTaskTemplate"), DataTemplate)
                End If
            End If

            Return Nothing
        End Function
    End Class
End Namespace

Vervolgens kunnen we de TaskListDataTemplateSelector declareren als een resource:

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

Als u de sjabloonkiezerresource wilt gebruiken, wijst u deze toe aan de eigenschap ItemTemplateSelector van de ListBox. De ListBox roept de SelectTemplate methode van de TaskListDataTemplateSelector aan voor elk van de items in de onderliggende verzameling. De aanroep geeft het gegevensobject door als de itemparameter. De DataTemplate die door de methode wordt geretourneerd, wordt vervolgens toegepast op dat gegevensobject.

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

Voor het volledige voorbeeld, zie Inleiding tot data-templatesample.

Opmerkingen

Normaal gesproken gebruikt u een sjabloonkiezer wanneer u meer dan één gegevenssjabloon hebt gedefinieerd voor hetzelfde type objecten. Als uw bindingsbron bijvoorbeeld een lijst met studentobjecten bevat en u een bepaalde sjabloon wilt toepassen op de parttime studenten. U kunt dit doen door een klasse te maken die de methode overschrijft en overschrijft DataTemplateSelectorSelectTemplate . Zodra uw klasse is gedefinieerd, kunt u een exemplaar van de klasse toewijzen aan de eigenschap sjabloonkiezer van uw element.

Van toepassing op