wpf手动生成TreeViewItem容器

时间:2010-04-22 07:13:17

标签: c# wpf treeview treeviewitem itemcontainergenerator

我正在运行时创建一个TreeView。它有几个节点(TreeViewItem),每个节点都有一个名称。最初它崩溃了。单独的comboBox显示所有TreeViewItem的名称。我必须根据所选的名称突出显示TreeViewItem。我正在使用递归函数并获取TreeViewItem容器,如下所示:

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

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

但它是

  

parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted

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

1 个答案:

答案 0 :(得分:2)

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

视图模型可以增加树视图功能,而不必担心您遇到的各种问题。

您的应用程序的视图模型将具有一些额外的属性

IsSelected

IsExpanded

IsHighlighted

以及

Data

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

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

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