【问题标题】:Why TreeViewItems not generated in Multibinding except if visible?为什么除非可见,否则不会在 Multibinding 中生成 TreeViewItems?
【发布时间】:2011-10-31 05:20:03
【问题描述】:

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

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

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

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

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

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

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

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

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

谢谢

【问题讨论】:

    标签: wpf treeview treeviewitem multibinding


    【解决方案1】:

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

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

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

    一个问题是,TreeView 控件的选择有点问题。解决方法见this文章

    【讨论】:

    • 我试过 VirtualizingStackPanel.IsVirtualizing="False" 对我不起作用,给了我同样的行为。正如我所读和你所说的,我不应该使用它。向 TreeView 资源添加的样式起到了作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 2021-04-14
    相关资源
    最近更新 更多