Wpf TreeView具有列,具有UI虚拟化和DataVirtualization

Eli*_*gan 5 c# wpf treeview wpf-controls data-virtualization

我正在寻找一个wpf控件(免费或商业).树应支持所有常规树视图特性(样式,数据模板,控件模板......),并支持使用Columns布局(类似于Visual Studio中的Watch窗口).

但是也:

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

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

Ste*_*pUp 2

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

要包含DataVirtualization您应该使用:

<TreeView
    VirtualizingStackPanel.IsVirtualizing = "True"
    VirtualizingStackPanel.VirtualizationMode = "Recycling" />
Run Code Online (Sandbox Code Playgroud)

但要小心,只有在使用Virtualization 时才有效TreeViewBinding,而不是在代码中一一生成节点时有效,如下例所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

更新:

您可以使用DevExpress TreeList控件。它是免费试用的。

或者Telerik 的 TreeView控件。这是 30 天的免费试用。查看他们的演示,您甚至可以下载并尝试它们。

更新1:

如果您对 Josh Smith 的 TreeView性能有任何疑问,那么我可以谈谈我的经验:

  • 我有 500 个节点,加载这些项目的时间是 0.0003982 秒
  • 我可以向上和向下滚动,并且没有任何冻结的 UI(完美的数据虚拟化
  • Josh Smith 使用延迟加载时,嵌套节点完美打开
  • 所有节点都可以有模板。因此您可以设置任何您想要的图像或设计
  • TreeView并不绝对违反 MVVM 规则,因为它viewModels用于TreeViewItems. 这意味着如果您TreeViewITemviewModel. 例如这个错误

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

我的照片TreeView

在此输入图像描述