簡體   English   中英

WPF TreeView和虛擬化(UI和數據)

[英]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帖子:( 我不會復制/粘貼XAMLTreeview上的VirtualizingStackPanel不是虛擬化

有用的MSDN鏈接:

你提到的文章來自Josh Smith。 本文作者還有另一篇關於“代碼項目”的文章,介紹了在MVVM模式中集成的虛擬子項和延遲加載,以避免所有數據的初始加載。

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM