C# 如何基于对象属性动态更新数据模板?
我有一组具有不同渲染选项的对象:它们可以是简单文本、可编辑文本、组合框或事件混合包(如组合框,其中项目通常为文本,但带有特定值的图像) 我通过在C# 如何基于对象属性动态更新数据模板?,c#,wpf,xaml,dynamic,datatemplate,C#,Wpf,Xaml,Dynamic,Datatemplate,我有一组具有不同渲染选项的对象:它们可以是简单文本、可编辑文本、组合框或事件混合包(如组合框,其中项目通常为文本,但带有特定值的图像) 我通过在ListViewItem.ItemTemplate的DataTemplate中的ContentPresenter节点中使用ContentTemplateSelector正确显示了所有内容: (请注意,所有内容都在ListView.ItemTemplate的DataTemplate中) 在我更改所述属性的值并需要更改模板之前,一切都很好,例如从图像更改
ListViewItem.ItemTemplate的DataTemplate
中的ContentPresenter
节点中使用ContentTemplateSelector
正确显示了所有内容:
(请注意,所有内容都在ListView.ItemTemplate
的DataTemplate
中)
在我更改所述属性的值并需要更改模板之前,一切都很好,例如从图像更改为文本。
VM确实正确地更新了这些值,但GUI中没有发生任何事情
环顾这里,有几种方法(使用转换器
(绑定到哪个属性??),定义样式
(我认为不相关,因为我必须显示不同的控件,而不是更改同一个控件的属性),使用附件属性
(我不太了解附加属性是如何工作的,但从我看到的情况来看,我应该有一个ContentControl
节点,我没有…),但我似乎什么都不需要
因此,回顾一下:我有一个ListView,它为每个ListViewItem
定义了一个DataTemplate
,其中包含另一个DataTemplate
,需要根据ListViewItem
对象的属性进行更改。我使用ContentTemplateSelector
实现了这一点,但它是在开始时分配的ning,然后从未更改。您可以尝试将ContentPresenter
替换为ContentControl
,该控件具有样式,并带有设置ContentTemplate
的数据触发器。例如:
<ContentControl Content="{Binding}">
<ContentControl.Style>
<Style TargetType="ContentControl">
<Style.Triggers>
<DataTrigger Binding="{Binding YourProperty}" Value="Type1">
<Setter Property="ContentTemplate" Value="{StaticResource template1}" />
</DataTrigger>
<DataTrigger Binding="{Binding YourProperty}" Value="Type2">
<Setter Property="ContentTemplate" Value="{StaticResource template2}" />
</DataTrigger>
<!-- ... -->
</Style.Triggers>
</Style>
</ContentControl.Style>
</ContentControl>
这有帮助吗?或者可能是黑客正在删除该项并将其重新插入列表中。当您希望通过数据类型指定视觉外观时,通常会使用数据模板。我需要更多地了解您尝试执行的操作的具体情况,但听起来您实际上需要的是外观由一个值控制。如果是这样,那么您需要的是一个DataTrigger。无论哪种方式,当您恢复使用代码隐藏时,无论是以转换器或模板选择器等形式,您都可能做错了!