2011-11-18 98 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鏈接: