为什么TreeViewItems不在Multibinding中生成,除非可见?

时间:2011-08-20 13:49:19

标签: wpf treeview treeviewitem multibinding

我有一个3级TreeView,它使用多重绑定为A类的每个实例生成  2 TreeViewItems作为B类列表。每个List都包含可以说C类的项目。

我可以在我的用户界面中为每个列表添加C类项目,同时折叠列表(B类)。 我甚至可以为每个List(B类)添加C类,同时整个TreeViewItem(A类)被折叠。

我的问题是我需要能够访问所有TreeViewItem,即使它们已折叠。(例如,选择它们)。

我试过这样做,但我遇到了以下问题:

1-所有不可见的TreeViewItems(类B和C)尚未创建为TreeViewItems。(我怎样才能使它们成为?)

2-当你第一次扩展B类TreeViewIiem时,你会看到它的所有项目(C类)为TreeViewItems。(显然是微不足道的)

3-在特定类中扩展任何B类(仅有2个)之后折叠将导致能够将C类实例添加为 TreeViewItems 即使整个TreeViewItem(A类)被折叠。(只要你留在这个Class A TreeViewItem中)

4-如果你更改了所选的A类(即如果你点击另一个具有A类祖先不同于所选A类的TreeViewItem),那么以前选择的A类的所有不可见的TreeViewItem都会丢失。你可以在新选择的A类中通过第1步重新开始。

那么我怎样才能在任何给定时刻选择C类或B类的任何TreeViewItem?

谢谢

1 个答案:

答案 0 :(得分:0)

到1)根据要在树视图中显示的项目数,想要创建所有TreeViewItem。你所观察到的是虚拟化。如果你真的不想这样,我强烈建议你不要这样做,你可以在TreeView上使用VirtualizingStackPanel.IsVirtualizing="False"。如果你不介意弄脏手,this也可能有帮助。

不幸的是,我不明白你的其他观点。首先,告诉我们如何创建数据层次结构。我想你可以在使用动态数据和HierarchicalDataTemplate使用正确的绑定(用于折叠等)时使一切正常。 因为那时ui控制是可见的并不重要,只有数据应该是相关的。

对于你最后和实际的问题。如果使用ItemsSource和HierarchicalDataTemplate,则可以使用easyyl遍历数据来查找项目,例如,折叠以使所有C类可见。

但有一个问题是,选择TreeView控件有点问题。有关解决问题的方法,请参阅this文章