DataTemplateSelector.SelectTemplate(Object, DependencyObject) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Po przesłonięciu w klasie pochodnej funkcja zwraca wartość opartą DataTemplate na logice niestandardowej.
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
Parametry
- item
- Object
Obiekt danych, dla którego ma być wybrany szablon.
- container
- DependencyObject
Obiekt powiązany z danymi.
Zwraca
Zwraca wartość lub DataTemplatenull
. Wartość domyślna to null
.
Przykłady
W tym przykładzie źródło powiązania jest listą Task
obiektów. Jedną z właściwości Task
obiektu jest Priority
. Istnieją dwa zdefiniowane szablony danych i myTaskTemplate
importantTaskTemplate
.
Aby podać logikę, która DataTemplate ma być używana na Priority
podstawie wartości obiektu danych, utwórz podklasę DataTemplateSelector i przesłoń metodę SelectTemplate . W poniższym przykładzie SelectTemplate metoda udostępnia logikę umożliwiającą zwrócenie odpowiedniego szablonu na podstawie wartości Priority
właściwości. Szablon do zwrócenia znajduje się w zasobach elementu otaczania Window .
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
Następnie możemy zadeklarować element TaskListDataTemplateSelector
jako zasób:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Aby użyć zasobu selektora szablonu, przypisz go do ItemTemplateSelector właściwości .ListBox Metoda ListBox wywołuje metodę SelectTemplateTaskListDataTemplateSelector
dla każdego elementu w podstawowej kolekcji. Wywołanie przekazuje obiekt danych jako parametr elementu. Obiekt DataTemplate zwracany przez metodę jest następnie stosowany do tego obiektu danych.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Pełny przykład można znaleźć w temacie Introduction to Data Templating Sample (Wprowadzenie do przykładu tworzenia szablonów danych).
Uwagi
Zazwyczaj używasz selektora szablonów, jeśli masz więcej niż jeden szablon danych zdefiniowany dla tego samego typu obiektów. Jeśli na przykład źródło powiązania zawiera listę obiektów uczniów i chcesz zastosować określony szablon do uczniów w niepełnym wymiarze godzin. Można to zrobić, tworząc klasę dziedziczą po DataTemplateSelector metodzie i przesłaniając ją SelectTemplate . Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonu elementu.