Freigeben über


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.

Um eine Logik bereitzustellen, mit der ausgewählt werden kann, welche DataTemplate 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 stellt die SelectTemplate-Methode Logik zum Zurückgeben der entsprechenden Vorlage auf der Grundlage des Werts der Priority-Eigenschaft bereit. 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

Wir können dann den 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 der ListBox hinzu. 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 erstellen Sie eine DataTemplateSelector , wenn Sie über mehrere DataTemplate Objekte für denselben Objekttyp verfügen und Ihre eigene Logik bereitstellen möchten, um basierend auf den Eigenschaften jedes Datenobjekts eine DataTemplate auszuwählen, die angewendet werden soll. Beachten Sie, dass Sie die -Eigenschaft DataTemplatefür festlegen können, wenn Sie über Objekte unterschiedlicher Typen verfügenDataType. Wenn Sie dies tun, ist es nicht erforderlich, eine DataTemplateSelectorzu erstellen. Wenn Sie über Objekte desselben Typs, aber mit unterschiedlichen Eigenschaften verfügen, können Sie auch die Verwendung eines DataTrigger oder eines Datenkonverters in Betracht ziehen. Weitere Informationen finden Sie unter Übersicht über Datenvorlagen.

Um eine Vorlagenauswahl zu erstellen, erstellen Sie eine Klasse, die von DataTemplateSelector der -Methode erbt, und überschreiben Sie sie SelectTemplate . Nachdem Ihre Klasse definiert wurde, können Sie der Vorlagenauswahleigenschaft Ihres 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: