是否有任何性能上的差异使用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