WPF DataTemplate绑定取决于属性的类型

我有一组绑定到分层数据模板的对象,我的每个对象都有一个属性(我们称之为属性“A”)属于某种类型。 这种类型在每个对象之间变化。

如果数据模板包含图像和某些文本,那么根据属性“A”的类型更改模板中显示的图像的最佳方法是什么。

我知道我可以把它放到转换器中并在代码中手动进行绑定转换,但是在WPF中提供了所有绑定工具,我认为这可能是更好的方法。

如果您创建本地数据模板并使用ContentPresenter ,则在数据模板中执行此操作非常简单。 此模板显示MyObject类型的对象,显示一个图像,其源由TextBlock旁边的A属性的类型确定,该TextBlock显示Text属性的内容:

               

如果你想使用样式代替这样做,你将遇到问题,因为数据触发器想要查看属性值,而A属性的类型本身不作为属性公开。

当然,除非你实施一个:

 public Type AType { get { return A.GetType(); } } 

(当A的值发生变化时,您还需要为AType引发PropertyChanged 。)一旦完成此操作,您应该能够在样式中实现数据触发器,例如:

  

我想你可以用触发器做到这一点。

    

DataTemplateSelector似乎不是一个好选择,因为您对A所有值都有相同的模板。

使用DataTriggers

    Your text               

没有测试过,但想法就是这样。