Til*_*lak 15 wpf triggers datatemplate datatemplateselector
我有一个绑定到任务的项控件.每个任务都有任务状态.我为每个任务状态定义了不同的数据模板,还为数据模板选择器定义
问题是,当动态更改任务状态时,我无法弄清楚如何触发数据模板选择器.
我想知道如何将数据触发器与数据模板一起使用.
如果这不会成功,我将探索其他替代方案,例如
1.附加属性绑定到任务状态.任何更改都将动态设置数据模板.
2.视觉状态管理器
Rac*_*hel 46
A DataTemplateSelector不响应PropertyChange通知,因此在您的属性更改时不会重新评估.
我使用的替代方案是根据属性DataTriggers更改Template.
例如,这将TaskModel使用a 绘制所有对象ContentControl,并且ContentControl.Template基于该TaskStatus属性TaskModel
<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>
Run Code Online (Sandbox Code Playgroud)
对于那些像我一样发现这有极大帮助的人,请速记一下:
当前使用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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22006 次 |
| 最近记录: |