DataTemplateSelector Класс
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет способ выбрать DataTemplate на основе объекта данных и элемента с привязкой к данным.
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- Наследование
-
DataTemplateSelector
В этом примере источник привязки Task
представляет собой список объектов. Одним из свойств Task
объекта является Priority
. Определены два шаблона данных и myTaskTemplate
importantTaskTemplate
.
Чтобы указать логику, которую DataTemplate следует использовать на Priority
основе значения объекта данных, создайте подкласс DataTemplateSelector и переопределите SelectTemplate метод. В следующем примере SelectTemplate метод предоставляет логику возврата соответствующего Priority
шаблона на основе значения свойства. Возвращаемый шаблон находится в ресурсах обручающего 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
Затем можно объявить TaskListDataTemplateSelector
как ресурс:
<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>
Чтобы использовать ресурс селектора шаблона, назначьте его свойству ItemTemplateSelector ListBoxобъекта . SelectTemplate Вызывает ListBox метод TaskListDataTemplateSelector
каждого элемента в базовой коллекции. Вызов передает объект данных в качестве параметра элемента. Возвращаемый DataTemplate методом объект данных затем применяется к данному объекту данных.
<ListBox Width="400" Margin="10"
ItemsSource="{Binding Source={StaticResource myTodoList}}"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
HorizontalContentAlignment="Stretch"/>
Полный пример см. в разделе Вводная часть примера стилизации и использования шаблонов.
Как правило, создается DataTemplateSelector при наличии нескольких DataTemplate объектов одного типа и вы хотите предоставить собственную логику для DataTemplate применения на основе свойств каждого объекта данных. Обратите внимание, что если у вас есть объекты разных типов, свойство можно задать DataType в параметре DataTemplate. Если вы сделаете это, нет необходимости создавать DataTemplateSelector. Кроме того, если у вас есть объекты одного типа, но с разными свойствами, можно также рассмотреть возможность использования DataTrigger преобразователя данных или преобразователя данных. Дополнительные сведения см. в разделе "Общие сведения о шаблоне данных".
Чтобы создать селектор шаблонов, создайте класс, который наследует DataTemplateSelector метод и переопределит его SelectTemplate . После определения класса можно назначить экземпляр класса свойству селектора шаблона элемента.
Data |
Инициализирует новый экземпляр класса DataTemplateSelector. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Get |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
Get |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
Memberwise |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
Select |
При переопределении в производном классе возвращает DataTemplate на основе пользовательской логики. |
To |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Продукт | Версии |
---|---|
.NET Framework | 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8 |
Windows Desktop | 3.0, 3.1, 5, 6, 7 |