我们正试图想出一种虚拟化TreeView
的好方法,数据并不是真正的问题,因为它非常轻(每个项目大约16个字节),问题是我们可能有成千上万,虽然实际数据只需要160 kb的内存,但树视图项目确实使用了更多的内存。我们现在尝试使用3种不同的树进行虚拟化,WPF,Infragistics和Telerik。所有这些都有很大的问题,使它们无法用于我们的应用程序:
WPF TreeView
:滚动条显示一些奇怪的行为,跳转很多,更改大小不一致,用鼠标拖动滚动无法正常工作(跳回来和等)
Telerik :项目消失,滚动条也不稳定,项目随机展开折叠,样式不起作用
Infragistics :项目根本没有虚拟化,每个项目都留在内存中,使虚拟化毫无用处。
我们几个月来一直在努力解决这个问题,但我们一直未能找到一个好的解决方案。您是否有人在TreeView
中成功实施了超过9000项的虚拟化?如果是这样,你的策略是什么?你使用了第三方控件吗?它100%有效吗?
任何建议都非常赞赏。
感谢。
答案 0 :(得分:5)
我们使用了Bea Costa的 Stollnitz在ListView
中缩进项目并使用UI虚拟化效果良好的技巧。
http://www.beacosta.com/blog/?p=45
我已经在支持ICollectionView
中获得了100,000个项目,并且对过滤等仍然非常敏感。
答案 1 :(得分:2)
我们也处于类似情况,我们尝试使用Syncfusion树视图,这很可悲。由于我们没有选择任何其他第三方控制并且没有更好的解决方案可用,我们最终确定了虚拟化和按需加载(延迟加载)。
与我们的情况一样,通常所有节点都不会在任何给定时间展开。这在一定程度上解决了滚动问题,并使应用程序在大多数场景中都可用。虽然我们仍然有我们的数字,并继续寻找更好的解决方案。
我想在此提及 同时使用虚拟化和加载 需求(延迟加载)共同拥有它 自己的副作用 -
Need a sample for WPF TreeView search with Virtualization and Load On Demand
用于实现Load on的一些示例 需求 -
http://www.codeproject.com/KB/WPF/WPF_Explorer_Tree.aspx
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/1eb3ed3d-6379-4353-9f35-2c0aecb885f2/
http://www.telerik.com/help/wpf/radtreeview-features-load-on-demand.html