提供一种方式,用于根据数据对象和数据绑定元素来选择 DataTemplate。
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; } } }
<local:TaskListDataTemplateSelector x:Key="myDataTemplateSelector"/> <ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}" ItemTemplateSelector="{StaticResource myDataTemplateSelector}" HorizontalContentAlignment="Stretch"/>
通常,当您有多个 DataTemplate 用于相同类型的对象,并且您希望提供自己的逻辑来根据每个数据对象的属性来选择要应用的 DataTemplate 时,可以创建 DataTemplateSelector。 请注意,如果您具有不同类型的对象,则可以设置 DataTemplate上的 DataType 属性。 如果这样做,则无需创建 DataTemplateSelector。 此外,如果您的对象具有相同类型但具有不同的属性,则还可以考虑使用 DataTrigger 或数据转换器。