WPF根据选择

时间:2018-05-16 16:07:40

标签: wpf treeview

我有一个绑定的,分层的TreeView。对于底层数据的性质,同一个对象可能会在树中多次出现:

A
--A1
  ---A11
--A2
B
--B1
--A1      <<< A1 is a node under both A and B
  ---A11  <<< A11 also shows up twice since it is a child of A1

请注意,虽然我的示例中显示了3个级别,但真实数据可以具有无限数量的级别。并且相同的对象可能会出现在多个级别中。 TreeViewHierarchicalDataTemplate IsHighlighted显示效果非常好。

由于A1可能出现在多个地方,我想向用户强调这一点,以便他们知道编辑A1不仅会影响A分支,还会影响B分支。

请注意,目标是突出显示其他A1,而不是更改选择。

我到目前为止唯一的解决方案是在对象的基础类中拥有IsHighlighted属性。选择A1时,我通过SelctedItemChanged处理程序更改IsHighlighted的值。 TreeViewItem又通过转换器绑定到Background的{​​{1}}属性,并且属性更改通知会触发GUI更新。

我对这个方法的问题是我现在在我的模型中有一个纯粹的UI驱动属性。虽然我没有严格遵守MVVM,但我希望至少让模型更加孤立。

建议的实施方法是什么?

1 个答案:

答案 0 :(得分:0)

我会坚持使用具有两个属性的模型:

  • 名称
  • IsHighlighted

这就是原因:

您所谈论的逻辑本质上是视图逻辑,但它不是决定视图显示数据的 ;相反,它只表示视图正在显示的 。因此,它应该驻留在视图模型中。视图模型是不可知的 - 意味着它们没有视图对象(例如Listview,Buttons等),但它们是视图的对象表示(也就是视图的模型)。