DataTemplateSelector Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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) |