DataTemplateSelector Klasa
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.
Zapewnia sposób wybierania DataTemplate obiektu na podstawie obiektu danych i elementu powiązanego z danymi.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Dziedziczenie
-
DataTemplateSelector
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 tworzy się obiekt DataTemplateSelector , jeśli masz więcej niż jeden DataTemplate dla tego samego typu obiektów i chcesz podać własną logikę, aby wybrać DataTemplate obiekt do zastosowania na podstawie właściwości każdego obiektu danych. Należy pamiętać, że jeśli masz obiekty różnych typów, możesz ustawić DataType właściwość w obiekcie DataTemplate. Jeśli to zrobisz, nie ma potrzeby tworzenia elementu DataTemplateSelector. Ponadto, jeśli masz obiekty tego samego typu, ale z różnymi właściwościami, możesz również rozważyć użycie konwertera DataTrigger danych lub . Aby uzyskać więcej informacji, zobacz Omówienie tworzenia szablonów danych.
Aby utworzyć selektor szablonu, utwórz klasę dziedziczą po DataTemplateSelector metodzie i przesłaniają SelectTemplate ją. Po zdefiniowaniu klasy można przypisać wystąpienie klasy do właściwości selektora szablonu elementu.
Konstruktory
DataTemplateSelector() |
Inicjuje nowe wystąpienie klasy DataTemplateSelector. |
Metody
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera wartość bieżącego wystąpienia. (Odziedziczone po Object) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
SelectTemplate(Object, DependencyObject) |
Po przesłonięciu w klasie pochodnej funkcja zwraca wartość opartą DataTemplate na logice niestandardowej. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |