WPF TreeView和虚拟化(UI和数据)

3
我有一个类似以下结构的层次结构:
 class User
  {
     public List<Contract> Contracts{get;set;}
  }

  class Contract
  {
     public List<Group> Groups{get;set;}
  }

  class Group
  {
     public List<Article> Articles{get;set;}
  }

  class Article
  {
      public string Name{get;set;}
      public string Id{get;set;}
  }

每个用户都有与他相关的一些合同,每个合同都有与之相关的一些组,每个组都有一些文章。
我在WPF中使用TreeView(带复选框,例如http://www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx)来直观地表示这一点:
(点击每个用户会在TreeView中显示此结构):
>Contract1
  >Group1
    >Article1
    >Article2
    >Article3
    >Article4
    ...
  >Group2
  >Group3
  ------------
  Add Button
  Remove Button
  -------------

使用前面的屏幕,用户可以通过勾选并点击添加按钮来向其账户添加更多文章、合同或组,或通过点击删除按钮来移除它们。

问题在于每个组中都有成千上万篇文章,我不想一次性将它们全部加载到内存中,因为这会减慢速度。

您能想到更好的处理方法吗?

1个回答

5
自WPF 3.5 SP1以来,存在VirtualizationMode.Recycling虚拟化模式,它允许重复使用项目容器,而不是在用户滚动项目控件时每次创建新的容器。

当VirtualizationMode设置为Recycling时,VirtualizingStackPanel会重用项目容器,而不是每次创建一个新的容器。

试一下

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

为使其在TreeView中起作用,请参阅此SO帖子:(我不会复制/粘贴XAMLTreeView上的VirtualizingStackPanel未进行虚拟化

有用的MSDN链接:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接