![](/img/trans.png)
[英]Wpf TreeView that has columns, with UI Virtualization and DataVirtualization
[英]WPF TreeView and Virtualization(UI & Data)
我有一個層次結構,如下所示:
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
-------------
使用先前屏幕,用戶可以通過選中它們並單擊“添加”按鈕或通過單擊“刪除按鈕”將其刪除來向其帳戶添加其他文章或合同或組。
問題是每個小組都有成千上萬的文章,我不想立刻將它們全部記在內存中,因為它會減慢速度。
你能想到更好的處理方法嗎?
由於WPF 3.5 SP1存在VirtualizationMode.Recycling虛擬化模式,它允許重用項容器,並且每次用戶滾動Items Control時都不會創建新容器。
當VirtualizationMode設置為Recycling時,VirtualizingStackPanel會重復使用項容器,而不是每次都創建一個新容器。
試用
<TreeView
VirtualizingStackPanel.IsVirtualizing = "True"
VirtualizingStackPanel.VirtualizationMode = "Recycling" />
為了使它適用於TreeView,請看這個SO帖子:( 我不會復制/粘貼XAML ) Treeview上的VirtualizingStackPanel不是虛擬化
有用的MSDN鏈接:
你提到的文章來自Josh Smith。 本文作者還有另一篇關於“代碼項目”的文章,介紹了在MVVM模式中集成的虛擬子項和延遲加載,以避免所有數據的初始加載。
http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.