Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс DataTemplateSelector

 

Опубликовано: Октябрь 2016

Предоставляет способ выбрать DataTemplate на основе объекта данных и элемента с привязкой к данным.

Пространство имен:   System.Windows.Controls
Сборка:  PresentationFramework (в PresentationFramework.dll)

System.Object
  System.Windows.Controls.DataTemplateSelector

public class DataTemplateSelector

ИмяОписание
System_CAPS_pubmethodDataTemplateSelector()

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

ИмяОписание
System_CAPS_pubmethodEquals(Object)

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

System_CAPS_protmethodFinalize()

Позволяет объекту попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как он будет уничтожен во время сборки мусора.(Наследуется от Object.)

System_CAPS_pubmethodGetHashCode()

Служит хэш-функцией по умолчанию.(Наследуется от Object.)

System_CAPS_pubmethodGetType()

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

System_CAPS_protmethodMemberwiseClone()

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

System_CAPS_pubmethodSelectTemplate(Object, DependencyObject)

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

System_CAPS_pubmethodToString()

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

Typically, you create a T:System.Windows.Controls.DataTemplateSelector when you have more than one T:System.Windows.DataTemplate for the same type of objects and you want to supply your own logic to choose a T:System.Windows.DataTemplate to apply based on the properties of each data object. Note that if you have objects of different types you can set the P:System.Windows.DataTemplate.DataType property on the T:System.Windows.DataTemplate. If you do that then there is no need to create a T:System.Windows.Controls.DataTemplateSelector. Furthermore, if you have objects of the same type but with different properties, you can also consider using a T:System.Windows.DataTrigger or a data converter. For more information, see Data Templating Overview.

To create a template selector, create a class that inherits from T:System.Windows.Controls.DataTemplateSelector and override the M:System.Windows.Controls.DataTemplateSelector.SelectTemplate(System.Object,System.Windows.DependencyObject) method. Once your class is defined you can assign an instance of the class to the template selector property of your element.

In this example, the binding source is a list of Task objects. One of the properties of a Task object is Priority. There are two data templates defined, myTaskTemplate and importantTaskTemplate.

To supply logic to choose which T:System.Windows.DataTemplate to use based on the Priority value of the data object, create a subclass of T:System.Windows.Controls.DataTemplateSelector and override the M:System.Windows.Controls.DataTemplateSelector.SelectTemplate(System.Object,System.Windows.DependencyObject) method. In the following example, the M:System.Windows.Controls.DataTemplateSelector.SelectTemplate(System.Object,System.Windows.DependencyObject) method provides logic to return the appropriate template based on the value of the Priority property. The template to return is found in the resources of the enveloping T:System.Windows.Window element.

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;
        }
    }
}

We can then declare the TaskListDataTemplateSelector as a resource:

<Window.Resources>
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/>
</Window.Resources>

To use the template selector resource, assign it to the P:System.Windows.Controls.ItemsControl.ItemTemplateSelector property of the T:System.Windows.Controls.ListBox. The T:System.Windows.Controls.ListBox calls the M:System.Windows.Controls.DataTemplateSelector.SelectTemplate(System.Object,System.Windows.DependencyObject) method of the TaskListDataTemplateSelector for each of the items in the underlying collection. The call passes the data object as the item parameter. The T:System.Windows.DataTemplate that is returned by the method is then applied to that data object.

<ListBox Width="400" Margin="10"
         ItemsSource="{Binding Source={StaticResource myTodoList}}"
         ItemTemplateSelector="{StaticResource myDataTemplateSelector}"
         HorizontalContentAlignment="Stretch"/>

For the complete sample, see Introduction to Data Templating Samplehttp://go.microsoft.com/fwlink/?LinkID=160009.

.NET Framework
Доступно с 3.0

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: