2011-11-18 82 views
3

我具有分层结构,例如以下:WPF TreeView和虚拟化(UI和数据)

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

每个用户都有关联到他一些合同,每个合同具有每个组相关联的对他一些组,和有一些文章。

我代表这在视觉上使用一个TreeView(具有复选框如在http://www.codeproject.com/KB/WPF/TreeViewWithCheckBoxes.aspx)在WPF:

(每个用户在显示器上点击在一个TreeView这个结构)

>Contract1 
    >Group1 
    >Article1 
    >Article2 
    >Article3 
    >Article4 
    ... 
    >Group2 
    >Group3 
    ------------ 
    Add Button 
    Remove Button 
    ------------- 

使用在先例屏幕上,用户可以通过检查他们并单击添加按钮或通过单击删除按钮删除他们来将其他账户或合同或组添加到他的账户。

的问题是,有在每个组的文章成千上万,我不希望把他们都在内存中一次,它会慢下来。

你能想到的处理这个没有更好的办法?

回答

5

由于WPF 3.5 SP1有VirtualizationMode.Recycling虚拟化模式,它允许再使用项容器并且不产生新的一个,每次用户滚动的项的控制。

当VirtualizationMode设置为回收利用, VirtualizingStackPanel重用,而不是创建一个新的 每一个时间项容器。

试用

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

,使之成为TreeView的工作看到这个SO职位:(我不会复制/粘贴XAMLVirtualizingStackPanel on a Treeview ist not Virtualizing

有用的MSDN链接: