是否有任何性能上的差異使用ObservableCollection
,其中(據我所知)刷新查看每次產品加入收藏,或改用簡單的List
收集,並刷新的時候就已經添加了所有元素整體看法?List或ObservableCollection?
而且如上甚至可以譴責與List
場景?那麼如何實現呢?
我這麼問是因爲我的ItemsControl很慢,我不知道它是否會更好地使用簡單的列表,而不是的ObservableCollection。我需要一次刷新視圖一次,實際上所有元素都已添加到集合中。
是否有任何性能上的差異使用ObservableCollection
,其中(據我所知)刷新查看每次產品加入收藏,或改用簡單的List
收集,並刷新的時候就已經添加了所有元素整體看法?List或ObservableCollection?
而且如上甚至可以譴責與List
場景?那麼如何實現呢?
我這麼問是因爲我的ItemsControl很慢,我不知道它是否會更好地使用簡單的列表,而不是的ObservableCollection。我需要一次刷新視圖一次,實際上所有元素都已添加到集合中。
ObservableCollection<T>
工具IList<T>
就像List<T>
一樣。主要區別當然是它實現了INotifyCollectionChanced
,它允許WPF綁定它。
ObservableCollection<T>
的拋出每次更改UI後可刷新的事件。如果按順序添加大量項目,可能會對性能產生一些影響,但這不太可能。您可以使用構造至極測試這個簡單的一個List:
var originalList = new List<SomeClass>();
foreach ([..])
{
originalList.Add(someInstance);
}
ObservableCollection<SomeClass> uiCollection = new ObservableCollection<SomeClass>(originalList);
這種方式,你可以創建你的對象和之後的複雜的列表其完成後,您可以創建一個ObservableCollection了它,你將綁定到上UI。
如果您不打算在運行時動態添加或刪除項目,則最好使用List<T>
而不是ObservableCollection<T>
。雖然性能的差異可以忽略不計。
有關ObservableCollection<T>
的特別之處在於,它實現了INotifyCollectionChanged
接口:https://msdn.microsoft.com/en-us/library/system.collections.specialized.inotifycollectionchanged(v=vs.110).aspx
WPF訂閱了CollectionChanged
事件的任何集合實現這個接口來監聽收集相關的改變。因此,如果您出於某種原因想要創建自己的支持更改通知的自定義集合,則可以創建一個實現此接口的類。
我強烈懷疑你的性能問題與你正在使用的源集合類型有關。您應該確保用戶界面已啓用虛擬化和走線槽的建議,關於如何提高在WPF控件的性能以下列表:https://msdn.microsoft.com/en-us/library/cc716879(v=vs.110).aspx