2017-01-16 38 views
0

是否有任何性能上的差异使用ObservableCollection,其中(据我所知)刷新查看每次产品加入收藏,或改用简单的List收集,并刷新的时候就已经添加了所有元素整体看法?List或ObservableCollection?

而且如上甚至可以谴责与List场景?那么如何实现呢?

我这么问是因为我的ItemsControl很慢,我不知道它是否会更好地使用简单的列表,而不是的ObservableCollection。我需要一次刷新视图一次,实际上所有元素都已添加到集合中。

回答

1

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。

1

如果您不打算在运行时动态添加或删除项目,则最好使用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