4

我想知道什麼是使用WPF中的CollectionViews的最佳做法,特別是使用CollectionViewSource.GetDefaultView()方法。有沒有人遇到任何使用GetDefaultView的問題?我們擔心它可能會導致一些內存泄漏。內存泄漏與WPF中CollectionViewSource.GetDefaultView()?

通常手動創建ListCollectionViews而不是依賴GetDefaultView()會更好嗎?

WPF如何管理這些視圖?收藏時他們會得到GC嗎?我見過一些文章說你需要從源代碼集合中分離出CollectionViews,否則你會發生內存泄漏。

感謝您的幫助!

回答

2

Bea指出使用CollectionViewSource.GetDefaultView()是她給定集合的favorite way for accessing the view。另外,我個人從來沒有遇到過使用CollectionViewSource.GetDefaultView()的任何問題,但它在給定的情況下肯定是可能的。

您必須明白,集合都有一個默認視圖,並且當您將給定的屬性綁定到給定的集合時,WPF會自動將該集合與視圖一起包裝並綁定到視圖;不是集合。

因爲這是WPF框架的一部分,所以您必須假設每個集合都有一個與之關聯的視圖,然後在集合被處置時它將被丟棄。如果通過可綁定屬性對集合進行引用,則會引用該集合的相關視圖,無論您是否撥打電話號碼CollectionViewSource.GetDefaultView(),所以您仍然處於同一個困境中。

經驗evidence的存在,直到集合超出範圍,關聯的視圖將不會GC'ed;但是請記住,這是處理與實施INotifyCollectionChanged收集。

根據您的情況,集合和相關視圖之間可能存在1:1關係,因此耦合可能不會提供任何障礙。在這種情況下,一旦集合已經超出範圍,正在GC'ed的視圖不是問題。

歸結爲謹慎行事,並確保您知道在更復雜的情況下發生了什麼,以便您可以採取適當的措施。