DataTemplateSelector.SelectTemplate(Object, DependencyObject) Methode
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.
Gibt beim Überschreiben in einer abgeleiteten Klasse eine auf benutzerdefinierter Logik basierende DataTemplate zurück.
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 einen DataTemplate- oder null
-Wert zurück. 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, 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
In der Regel verwenden Sie eine Vorlagenauswahl, wenn mehrere Datenvorlagen für denselben Objekttyp definiert sind. Wenn Ihre Bindungsquelle beispielsweise eine Liste von Kursteilnehmerobjekten auflistet und Sie eine bestimmte Vorlage auf die Teilzeitstudenten anwenden möchten. Sie können dies tun, indem Sie eine Klasse erstellen, 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.