我见过的最好的例子是Josh Smith 的 TreeView。它使用按需加载并具有文本搜索功能。
要包括DataVirtualization
你应该使用:
<TreeView
VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" />
但请注意,Virtualization
仅在TreeView
usingBinding
时有效,而不是在代码中逐个生成节点时有效,如下例所示:
TreeViewItem rootItem = new TreeViewItem() { Header = "Item Level 0" };
for (int i = 0; i < 1000; i++)
{
TreeViewItem itemLevel1 = new TreeViewItem() { Header = "Item Level 1" };
itemLevel1.Items.Add(new TreeViewItem());
rootItem.Items.Add(itemLevel1);
}
更新:
您可以使用DevExpress TreeList控件。它是免费试用的。
或者Telerik 的 TreeView控件。这是 30 天免费试用。查看他们的演示,您甚至可以下载并试用它们。
更新1:
如果您对Josh Smith 的 TreeView性能有任何疑问,那么我可以谈谈我的经验:
- 我有 500 个节点,加载这些项目的时间是 0.0003982 秒
- 我可以向上滚动和向下滚动,并且没有任何冻结的 UI(完美的数据虚拟化)
- 嵌套节点完美打开,因为 Josh Smith 使用延迟加载
- 所有节点都可以有模板。所以你可以设置任何你想要的图像或设计
- 这
TreeView
并不绝对违反 MVVM 规则,因为它viewModels
用于TreeViewItems
. 这意味着如果您TreeViewITem
的viewModel
. 比如这个错误。
最后,我想说我很高兴我TreeView by JoshSmith
在生产应用程序中选择了它,因为支持和编辑它真的很简单。它的性能真的很棒。
我的照片TreeView
:
