2

我在运行时创建一个 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

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

4

1 回答 1

3

每当您发现自己正在走可视化树时,您都应该认真考虑构建视图模型。

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

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

IsSelected

IsExpanded

IsHighlighted

以及你的

Data

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

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

这是一篇关于 ViewModel 和 TreeView 的好文章...

于 2010-04-22T07:52:26.020 回答