【问题标题】:wpf manually generate TreeViewItem containerwpf 手动生成 TreeViewItem 容器
【发布时间】:2010-04-22 15:52:26
【问题描述】:

我正在运行时创建 TreeView。它有几个节点(TreeViewItem),每个节点都有一个名称。最初它是折叠的。一个单独的组合框显示所有 TreeViewItem 的名称。我必须根据所选名称突出显示 TreeViewItem。我正在使用递归函数并像这样获取 TreeViewItem 容器:

if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                continue;

TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();

但它是

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

对于所有折叠的项目。如何手动为它们生成容器(不扩展它们)?

【问题讨论】:

    标签: c# wpf treeview treeviewitem itemcontainergenerator


    【解决方案1】:

    任何时候你发现自己正在走可视化树,你应该认真考虑构建一个视图模型。

    视图模型可以增加树视图功能,而无需担心您面临的各种问题。

    您的应用程序的视图模型将有几个额外的属性

    IsSelected
    
    IsExpanded
    
    IsHighlighted
    

    还有你的

    Data
    

    然后您将绑定(使用 ItemContainerStyle)IsSelected、IsHighlighted 和 IsExpanded 到 TreeViewItem,然后当您拥有这些视图模型的集合时,您可以在视图模型上进行搜索并设置属性 IsHighlighted。然后视图模型会做出响应,并且由于绑定到样式,如果您愿意,它会突出显示树视图项。它还可以做一些时髦的事情,比如扩展上面的所有节点。树视图会对此做出响应。

    视图模型与树视图相结合提供了更大的灵活性,并停止了那些可视化的树爬行练习(这是一种 hack,感觉很脏)

    这是good article about the ViewModel and the TreeView...

    【讨论】:

      猜你喜欢
      • 2010-11-20
      • 1970-01-01
      • 2018-04-27
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 2016-08-23
      相关资源
      最近更新 更多