wpf - 动态更改数据模板

标签 wpf triggers datatemplateselector datatemplate

我有一个绑定(bind)到任务的项目控件。每个任务都有任务状态。我为每个任务状态定义了不同的数据模板,以及数据模板选择器。

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

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

如果这行不通,我将探索其他替代方案,例如
1. 附加属性绑定(bind)到任务状态。任何更改都会动态设置数据模板。
2. 视觉状态管理器

最佳答案

一个 DataTemplateSelector不回复 PropertyChange通知,因此当您的属性更改时不会重新评估它。

我使用的替代方法是 DataTriggers这改变了Template基于一个属性。

例如,这将绘制所有 TaskModel使用 ContentControl 的对象,以及 ContentControl.Template基于 TaskStatus TaskModel 的属性(property)

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

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

<DataTemplate DataType="{x:Type local:TaskModel}">
     <ContentControl Content="{Binding }">
         <ContentControl.Style>
             <Style TargetType="{x:Type ContentControl}">

                 <!-- Default Template -->
                 <Setter Property="ContentTemplate" Value="{StaticResource OpenTaskTemplate}" />

                 <!-- Triggers to change Template -->
                 <Style.Triggers>
                     <DataTrigger Binding="{Binding TaskStatus}" Value="Closed">
                         <Setter Property="ContentTemplate" Value="{StaticResource ClosedTaskTemplate}" />
                     </DataTrigger>
                 </Style.Triggers>
             </Style>
         </ContentControl.Style>
     </ContentControl>
 </DataTemplate>

关于wpf - 动态更改数据模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13136816/

相关文章:

wpf - 如何在 wpf 屏幕上显示忙碌消息

wpf - 重写 WPF 中定义的 ControlTemplate 边框样式

c# - LongListSelector 和 DataTemplateSelector

postgresql - 是否可以使用变量访问postgresql触发器中的记录列

MySQL 将 FOR EACH 嵌套在单个触发器中而不是多个触发器中

c# - 如何在属性更改时触发 DataTemplateSelector?

c# - WPF 应用程序在尝试查找静态资源时关闭

c# - WPF richtextbox 上的多语言拼写检查

mysql - 当条件为真时,如何使用 MySQL 触发器更新多个表?