DataTemplateSelector 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
提供一种方式,用于根据数据对象和数据绑定元素来选择 DataTemplate。
public ref class DataTemplateSelector
public class DataTemplateSelector
type DataTemplateSelector = class
Public Class DataTemplateSelector
- 继承
-
DataTemplateSelector
示例
在此示例中,绑定源是对象的列表 Task
。 对象的一个 Task
属性是 Priority
。 定义了两个数据模板: myTaskTemplate
和 importantTaskTemplate
。
若要提供逻辑以根据数据对象的 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>
若要使用模板选择器资源,请将其分配到 ListBox 的 ItemTemplateSelector 属性。
ListBox 为基础集合中的每一项调用 TaskListDataTemplateSelector
的 SelectTemplate 方法。 该调用会将数据对象作为项参数传递。 然后将方法返回的 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) |