动态更改数据模板

时间:2012-10-30 10:14:49

标签: wpf triggers datatemplateselector datatemplate

我有一个绑定到Tasks的项控件。每个任务都有任务状态。我为每个任务状态和数据模板选择器定义了不同的数据模板。

问题是当动态更改任务状态时,我无法弄清楚如何触发数据模板选择器。

我想知道如何将数据触发器与数据模板一起使用。

如果这不起作用,我将探索其他替代方案,例如 1.附属财产必然属于任务状态。任何更改都将动态设置数据模板 2.视觉状态管理器

2 个答案:

答案 0 :(得分:42)

DataTemplateSelector不响应PropertyChange通知,因此在您的媒体资源发生变化时不会重新评估。

我使用的替代方法是DataTriggers,它会根据属性更改Template

例如,这将使用TaskModel绘制所有ContentControl个对象,ContentControl.Template基于TaskStatus的{​​{1}}属性

TaskModel

答案 1 :(得分:4)

对于那些发现这非常有帮助的人来说,只是一个简短的注释 -

目前使用WPF,您似乎希望在DataTemplate定义中使用 DataType 而不是 TargetType

<DataTemplate x:Key="OpenTaskTemplate" DataType="{x:Type local:TaskModel}">
     <TextBlock Text="I'm an Open Task" />
</DataTemplate> 

<DataTemplate x:Key="ClosedTaskTemplate" DataType="{x:Type local:TaskModel}">
     <TextBlock Text="I'm a Closed Task" />
 </DataTemplate>