DataTemplateSelector 类

定义

提供一种方式,用于根据数据对象和数据绑定元素来选择 DataTemplate

public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
继承
DataTemplateSelector

示例

在此示例中,绑定源是对象的列表 Task 。 对象的一个 Task 属性是 Priority。 定义了两个数据模板: myTaskTemplateimportantTaskTemplate

若要提供逻辑以根据数据对象的 Priority 值选择要使用的 DataTemplate,需要创建 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>

若要使用模板选择器资源,请将其分配到 ListBoxItemTemplateSelector 属性。 ListBox 为基础集合中的每一项调用 TaskListDataTemplateSelectorSelectTemplate 方法。 该调用会将数据对象作为项参数传递。 然后将方法返回的 DataTemplate 应用于该数据对象。

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

有关完整示例,请参阅数据模板化示例简介

注解

通常,如果针对同一DataTemplate类型的对象有多个对象,并且想要提供自己的逻辑,以便根据每个数据对象的属性选择要DataTemplate应用的 时,会创建 DataTemplateSelector 。 请注意,如果有不同类型的对象, 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)

适用于