代码之家  ›  专栏  ›  技术社区  ›  viky

wpf手动生成treeviewitem容器

  •  1
  • viky  · 技术社区  · 14 年前

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

    if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                    continue;
    
    TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
    

    但它是

    parent.itemContainerGenerator.status=生成器状态。未启动

    所有折叠的项目。如何手动生成容器(不展开容器)?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Aran Mulholland JohnnyAce    14 年前

    任何时候当你发现自己在视觉树上行走时,你都应该认真考虑建立一个视图模型。

    视图模型可以增加treeviews的功能,而不必担心您所面临的各种问题。

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

    IsSelected
    
    IsExpanded
    
    IsHighlighted
    

    以及你的

    Data
    

    然后,将IsSelected、IsHighlighted和IsExpanded绑定(使用itemContainerStyle)到TreeView项目,然后,由于您有这些视图模型的集合,您可以在视图模型上进行搜索,只需设置属性IsHighlighted。视图模型随后将响应,并且由于绑定到样式,如果需要,它将突出显示treeviewitem。它还可以做一些有趣的事情,比如扩展上面的所有节点。树视图将对此做出响应。

    与tree view结合使用时,视图模型提供了更大的灵活性,并停止了那些可视化的树爬行练习(这是一种技巧,而且感觉很脏)

    这里是一个 good article about the ViewModel and the TreeView