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 . После определения класса можно назначить экземпляр класса свойству селектора шаблона элемента.

Конструкторы

DataTemplateSelector()

Инициализирует новый экземпляр класса DataTemplateSelector.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
SelectTemplate(Object, DependencyObject)

При переопределении в производном классе возвращает DataTemplate на основе пользовательской логики.

ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Применяется к