我有这势必会任务的项目控制。每个任务都有任务状态。我为每个任务状态定义了不同的数据模板,并且还定义了数据模板选择器。更改数据模板动态
问题是,我无法弄清楚如何,当任务状态是动态变化的触发数据模板选择。
我想知道如何使用的数据与数据模板一起触发。
如果这还不能工作了,我会研究其他办法,势必任务状态,如
1.附加属性。任何更改都会动态设置数据模板。
2.视觉状态管理
我有这势必会任务的项目控制。每个任务都有任务状态。我为每个任务状态定义了不同的数据模板,并且还定义了数据模板选择器。更改数据模板动态
问题是,我无法弄清楚如何,当任务状态是动态变化的触发数据模板选择。
我想知道如何使用的数据与数据模板一起触发。
如果这还不能工作了,我会研究其他办法,势必任务状态,如
1.附加属性。任何更改都会动态设置数据模板。
2.视觉状态管理
一个DataTemplateSelector
并不PropertyChange
响应通知,所以当你的属性改变它没有得到重新评估。
我用另一种方法是DataTriggers
,基于属性改变Template
。
例如,这将吸引使用ContentControl
所有TaskModel
对象和ContentControl.Template
是基于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>
嗯,DataTemplate中似乎不具有TARGETTYPE构件。我错过了什么吗? –
@JakeGaston你使用Silverlight?我不认为隐式DataTemplates(只有TargetType设置的)在Silverlight中实现直到4.5。 – Rachel
只是快速注意到任何人的TaskStatus
属性,发现这个难以置信的帮助和我一样 -
目前,它看起来像你要对你的DataTemplate定义使用数据类型而不是的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>
也许这个答案也将适合你http://stackoverflow.com/questions/8715315/how-to-trigger-datatemplateselector-when-property-changes – michele
这个答案看过了。这可能工作,但看起来有点复杂。寻找更简单的解决方案。 – Tilak
问题可能与[如何对触发datatemplateselector-时,财产变动]复制(https://stackoverflow.com/questions/8715315/how-to-trigger-datatemplateselector-when-property-changes)和[带有DataTrigger VS的ControlTemplate与DataTemplateSelector的DataTemplate](https://stackoverflow.com/questions/8926024/controltemplate-with-datatrigger-vs-datatemplate-with-datatemplateselector) – huoxudong125