DataTemplateSelector Klasse

Definition

Bietet eine Möglichkeit zum Auswählen einer DataTemplate auf der Grundlage des Datenobjekts und des datengebundenen Elements.

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
Vererbung
DataTemplateSelector

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, myTaskTemplate und importantTaskTemplate.

Wenn Sie Logik angeben möchten, die DataTemplate auf der Grundlage des Priority Werts des Datenobjekts verwendet werden soll, erstellen Sie eine Unterklasse von DataTemplateSelector und überschreiben Sie die SelectTemplate Methode. Im folgenden Beispiel stellt die SelectTemplate Methode Logik bereit, um die entsprechende Vorlage basierend auf dem Wert der Priority Eigenschaft zurückzugeben. Die zurückzugebende Vorlage wird in den Ressourcen des Enveloping-Elements Window gefunden.

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

Wir können dann den TaskListDataTemplateSelector als Ressource deklarieren:

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

Weisen Sie sie der ItemTemplateSelector Eigenschaft der ListBoxVorlage zu, um die Vorlagenauswahlressource zu verwenden. Die ListBox Methode der TaskListDataTemplateSelector einzelnen Elemente in der zugrunde liegenden Auflistung wird aufgerufenSelectTemplate. Beim Aufruf wird das Datenobjekt als Elementparameter übergeben. Die DataTemplate von der Methode zurückgegebene Methode wird dann auf dieses Datenobjekt angewendet.

<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

Normalerweise erstellen Sie eine DataTemplateSelector , wenn Sie mehrere DataTemplate Objekte für denselben Typ haben und Ihre eigene Logik angeben möchten, um eine DataTemplate Anwendung basierend auf den Eigenschaften jedes Datenobjekts auszuwählen. Beachten Sie, dass Sie, wenn Sie Objekte verschiedener Typen haben, die DataType Eigenschaft auf der DataTemplate. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelector. Darüber hinaus können Sie bei Objekten desselben Typs, aber mit unterschiedlichen Eigenschaften auch die Verwendung eines DataTrigger Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.

Zum Erstellen einer Vorlagenauswahl erstellen Sie eine Klasse, die von DataTemplateSelector der SelectTemplate Methode erbt und überschreibt. Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft des Elements eine Instanz der Klasse zuweisen.

Konstruktoren

DataTemplateSelector()

Initialisiert eine neue Instanz der DataTemplateSelector-Klasse.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
SelectTemplate(Object, DependencyObject)

Gibt beim Überschreiben in einer abgeleiteten Klasse eine auf benutzerdefinierter Logik basierende DataTemplate zurück.

ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)

Gilt für: