带有UI的Wpf TreeView,具有UI虚拟化和DataVirtualization

时间:2016-03-28 05:09:25

标签: c# wpf treeview wpf-controls data-virtualization

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

但是:

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

2 个答案:

答案 0 :(得分:3)

我知道谁可以应用您的要求的最佳控件是Telerik RadTreeView。查看demo。优点:

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

Telerik RadTreeView控件在使用大量项目时的性能通过其按需加载功能得到显着优化。当用户通过单击“+”图标

扩展父节点时,此机制允许节点加载其子节点

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

答案 1 :(得分:2)

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

要包含DataVirtualization,您应该使用:

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

但请注意,Virtualization 仅在TreeView使用Binding 时有效,而则不在逐个生成节点时有效代码如下例所示:

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);
}

<强>更新

您可以使用the DevExpress TreeList控件。这是免费试用。

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

<强> UPDATE1:

如果您对表现TreeView by Josh Smith有任何疑问,那么我可以谈谈我的经历:

  • 我有500个节点,加载这些项目的时间是0.0003982秒
  • 我可以向上滚动并向下滚动,没有任何冻结的用户界面(完美的数据虚拟化
  • 当Josh Smith使用延迟加载
  • 时,嵌套节点完全打开
  • 所有节点都可以有模板。因此,您可以设置任何您想要的图像或设计
  • TreeView并非绝对违反MVVM规则,因为viewModels使用TreeViewItems。这意味着如果TreeViewITem中有viewModel,则不会遇到奇怪的错误或例外情况。例如,this error

总而言之,我想说我很高兴我在我的生产应用程序中选择TreeView by JoshSmith因为支持和编辑它非常简单。它的表现非常出色。

TreeView的照片:

enter image description here