5

我正在寻找一个 wpf 控件(免费或商业)。树应支持所有常规树视图特征(样式、数据模板、控件模板……)并支持使用列布局(有点像 Visual Studio 中的 Watch 窗口)。

但是也:

  1. 良好的虚拟化 - 应该支持数千个元素
  2. 内置数据虚拟化- 数据的加载和处理速度很慢,不能一次按一定顺序完成(有点像分页)
  3. 视图模型支持和绑定,我更喜欢使用视图模型来研究树而不是研究树本身
  4. 内置支持搜索和过滤数据表示,然后将匹配反映在树上的可视元素上
  5. 准确、快速的滚动和移动到特定元素的选项(我更喜欢使用项目的 ViewModel 表示)。

不想自己构建树,我正在寻找至少支持虚拟化和数据虚拟化的现有实现。

4

2 回答 2

3

我知道谁可以满足您的要求的最佳控制是Telerik RadTreeView。查看演示。优点:

RadTreeView API 支持 UI 虚拟化,它只处理加载在可视区域中的信息,从而减少应用程序的内存占用并加快加载时间,从而额外提高 UI 性能

Telerik RadTreeView 控件在处理大量项目时的性能通过其按需加载功能得到了显着优化。这种机制允许节点在用户通过单击“+”图标展开父节点时加载其子节点

RadTreeView 是一个数据驱动的控件,旨在显示大量分层数据,它不提供开箱即用的搜索、过滤和排序功能。因此,应该对它所代表的数据实施此类操作。例子

于 2016-04-13T13:03:37.940 回答
2

我见过的最好的例子是Josh Smith 的 TreeView。它使用按需加载并具有文本搜索功能。

要包括DataVirtualization你应该使用:

<TreeView
    VirtualizingStackPanel.IsVirtualizing = "True"
    VirtualizingStackPanel.VirtualizationMode = "Recycling" />

但请注意,Virtualization 仅在TreeViewusingBinding时有效,而不是在代码中逐个生成节点时有效,如下例所示:

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. 这意味着如果您TreeViewITemviewModel. 比如这个错误

最后,我想说我很高兴我TreeView by JoshSmith在生产应用程序中选择了它,因为支持和编辑它真的很简单。它的性能真的很棒。

我的照片TreeView

在此处输入图像描述

于 2016-03-28T06:21:37.220 回答