我有一个应用程序,在树视图中加载所有xml标签用于显示?问题是我的xml包含数千个标签并吃了大量内存。我在网上看到这是wpf treeview的一个bug。有人帮帮我?
答案 0 :(得分:2)
WPF TreeView控件已经提供了一种数据虚拟化形式,如How to: Improve the Performance of a TreeView中所述。这会解决显示已经存储在内存中的大量数据的问题。
基本上,您将VirtualizingStackPanel.IsVirtualizing和VirtualizingStackPanel.VirtualizationMode附加属性添加到Treeview中。虚拟化堆栈面板仅创建和绑定屏幕上可见的项目:
<TreeView Height="200"
ItemsSource="{Binding Source={StaticResource dataItems}}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
这并未解决您在内存中加载了数千条记录的情况。在这种情况下,它将导致问题的源数据,而不是TreeView本身。在这种情况下,真正的解决方案是通过使用适当的过滤器,不首先加载这么多项目。另一种选择是在用户滚动太远时将数据加载到页面中。
另一个选择是在用户扩展父节点时加载子节点,尽管这会引入烦人的延迟。