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