簡體   English   中英

將 ItemsControl 綁定到 ObservableCollection<t> 比列表更有效<t> ?</t></t>

[英]Is binding an ItemsControl to an ObservableCollection<T> more efficient than a List<T>?

我在ItemsControl中有一個渲染繁重的項目模板,並且希望在ItemsSource發出更改信號時盡量減少子項目模板的重新創建。 我想知道,因為ObservableCollection可以准確地告訴 WPF 發生了什么變化(而不是僅僅告訴整個列表),它是否更有效地呈現集合的變化,或者 WPF 是否足夠聰明,如果它檢測到,可以重用以前的項目視圖同一項目仍在更改列表中。

你的懷疑是正確的。 WPF 不會重復使用以前的視圖。 如果用新列表替換 ItemsControl 的 ItemsSource,它將為列表中的每個項目創建全新的視圖,即使相同的項目在舊列表中也是如此。

您可以通過在 ItemTemplate 中放置自定義控件並向其構造函數添加斷點或調試日志記錄來自行測試。 如果用相同的列表替換 ItemsSource,您將看到為列表中的每個項目構造一次控件。 另一方面,當一個項目被添加到 ObservableCollection 時,您只會看到它被調用一次。

請注意,如果您使用虛擬化面板並啟用容器回收,則 ItemsControl 可以重用容器(例如 ListBoxItem)。 請參閱鏈接 但是,它仍然不能重用容器中的內容。

ObservableCollection 僅通知對象的添加和刪除 - 因此可能不如您預期的那么精確(如果列表中的 object 發生更改,ObservableCollection 將不會觸發任何通知)。

暫無
暫無

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

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