0

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

当 Lists(Class B) 折叠时,我可以在 UI 中为每个 List 添加 Class C 的项目。我什至可以在整个 TreeViewItem(Class A) 折叠时为每个 List(Class B) 添加 Class C。

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

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

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

2-当您第一次扩展 B 类 TreeViewIiem 时,您可以将其所有项目(C 类)视为 TreeViewItems。(显然是微不足道的)

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

4-如果您更改所选的 A 类(即,如果您单击另一个 TreeViewItem,其 A 类的祖先与所选的不同)所有不可见的先前选择的 A 类的 TreeViewItems 都将丢失。并且您可以在新选择的 A 类中从第 1 步重新开始。

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

谢谢

4

1 回答 1

0

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

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

对于您的最后一个实际问题。如果您使用 ItemsSource 和 HierarchicalDataTemplate,您可以轻松遍历您的数据以找到您的项目,例如,折叠以使所有 C 类可见。

一个问题是,TreeView 控件的选择有点问题。请参阅这篇文章以获取解决方法

于 2011-08-20T14:28:25.120 回答