我正在运行时创建一个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
表示所有已折叠的项目。如何手动为它们生成容器(不扩展它们)?
答案 0 :(得分:2)
每当你发现自己走在视觉树上时,你应该认真考虑建立一个视图模型。
视图模型可以增加树视图功能,而不必担心您遇到的各种问题。
您的应用程序的视图模型将具有一些额外的属性
IsSelected
IsExpanded
IsHighlighted
以及
Data
然后你将(使用ItemContainerStyle)将IsSelected,IsHighlighted和IsExpanded绑定到TreeViewItem,然后就像你拥有这些视图模型的集合一样,你可以在视图模型上进行搜索并只设置属性IsHighlighted。然后视图模型将响应,并且由于绑定到样式,如果您愿意,它将突出显示treeviewitem。它也可以做一些时髦的东西,比如扩展上面的所有节点。树视图会响应这一点。
与树视图结合使用时的视图模型提供了更大的灵活性,并停止了那些可视树爬行练习(这是一种黑客攻击,并且感觉很脏)