Freigeben über


DataTemplateSelector.SelectTemplate(Object, DependencyObject) Methode

Definition

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird eine DataTemplate basierend auf benutzerdefinierter Logik zurückgegeben.

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

Parameter

item
Object

Das Datenobjekt, für das die Vorlage ausgewählt werden soll.

container
DependencyObject

Das datengebundene Objekt.

Gibt zurück

Gibt ein DataTemplate oder null. Der Standardwert ist null.

Beispiele

In diesem Beispiel ist die Bindungsquelle eine Liste von Task Objekten. Eine der Eigenschaften eines Task Objekts ist Priority. Es sind zwei Datenvorlagen definiert und myTaskTemplateimportantTaskTemplate.

Um eine Logik bereitzustellen, mit der ausgewählt werden kann, welches DataTemplate-Element auf der Grundlage des Priority-Werts des Datenobjekts verwendet werden soll, erstellen Sie eine Unterklasse von DataTemplateSelector und überschreiben die SelectTemplate-Methode. Im folgenden Beispiel liefert die SelectTemplate-Methode die Logik, um basierend auf dem Wert der Priority-Eigenschaft die entsprechende Vorlage zurückzugeben. Die Vorlage, die zurückgegeben werden soll, wird in den Ressourcen des umschließenden Window-Elements gesucht.

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

Anschließend können wir die TaskListDataTemplateSelector als Ressource deklarieren:

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

Um die Vorlagenauswahlressource verwenden zu können, weisen Sie diese der ItemTemplateSelector-Eigenschaft von ListBox zu. Die ListBox ruft die SelectTemplate-Methode des TaskListDataTemplateSelector der einzelnen Elemente in der zugrunde liegenden Auflistung auf. Beim Aufruf wird das Datenobjekt als Elementparameter übergeben. Die von der Methode zurückgegebene DataTemplate-Klasse wird dann auf dieses Datenobjekt angewandt.

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

Das vollständige Beispiel finden Sie unter Einführung in das Datenvorlagenbeispiel.

Hinweise

In der Regel verwenden Sie eine Vorlagenauswahl, wenn mehrere Datenvorlagen für denselben Objekttyp definiert sind. Wenn ihre Bindungsquelle beispielsweise eine Liste von Kursteilnehmerobjekten enthält und Sie eine bestimmte Vorlage auf die Teilzeitstudenten anwenden möchten. Dazu können Sie eine Klasse erstellen, die von DataTemplateSelector der SelectTemplate Methode erbt und sie überschreibt. Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft des Elements eine Instanz der Klasse zuweisen.

Gilt für: