我正在使用通过 MVVM 绑定到我的类的 WPF TreeView 来显示大量多级数据。因此,当我展开 TreeNode 时,需要一些时间和大量内存。
我认为,内存需求来自于 TreeView 侦察出的节点,而不仅仅是第一代的孩子,迫使这些节点加载数据。
有没有办法将这种“侦察”行为限制在第一代子节点?
WPF 仅在显示 TreeViewItem(s) 时才生成它们,即在其父项展开之前不会生成任何项目。所以,我认为问题不在于“侦察”。
无论如何,您可以尝试通过使用 TwoWay Binding 添加与 TreeViewItem.IsExpanded 的同步来在 ViewModel 中实现动态加载。看看这个。您可以对 IsExpanded 属性使用相同的解决方案。不要忘记添加假项目来告诉 TreeViewItem 它是可扩展的。
检查 TreeView 是否正在使用 VirtualizingStackPanel。我相信它在 .NET 4.0 中默认使用,但您必须在以前的 .NET 版本中显式设置它。
有关更多信息,请参阅如何:提高 TreeView 的性能。