wpf - 列表还是 ObservableCollection?

标签 wpf xaml observablecollection

使用 ObservableCollection 的性能是否有任何差异,(据我了解)每次将项目添加到集合时都会刷新 View ,或者改为使用简单的 List 集合,以及已添加所有元素时刷新整个 View ?

上面描述的 List 场景是否可能?那么如何实现呢?

我问是因为我的 ItemsControl 很慢,我想知道使用简单的 List 代替 ObservableCollection 是否会更好。我一次只需要刷新一次 View ,实际上所有元素都已添加到集合中。

最佳答案

ObservableCollection<T>实现 IList<T>就像 List<T>做。当然,主要区别在于它实现了 INotifyCollectionChanged这允许 WPF 绑定(bind)到它。

ObservableCollection<T>每次更改后都会引发一个事件,以便 UI 可以刷新。如果您按顺序添加大量项目,它可能会对您的性能产​​生一些影响,但这不太可能。您可以使用带有 List 的 Constructor 进行相当简单的测试:

var originalList = new List<SomeClass>();

foreach ([..])
{
  originalList.Add(someInstance);
}

ObservableCollection<SomeClass> uiCollection = new ObservableCollection<SomeClass>(originalList);

通过这种方式,您可以创建复杂的对象列表,完成后您可以从中创建一个 ObservableCollection,您将在 UI 上绑定(bind)到该列表。

关于wpf - 列表还是 ObservableCollection?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41680047/

相关文章:

c# - 在 WPF 的 OxyPlot 中更改轴文本颜色

Windows 8 商店应用程序 : Using multiple RichTextColumns in a flipview control

android - 如何在堆栈布局或框架中添加点击事件

database - 将 ObservableCollection<MyClass> 保存到 SQLite 或类似的 Xamarin Forms

c# - View 在不同的 Assembly 中找不到 ViewModel

C#:使用数据绑定(bind)文本框在 List<Customer> 中导航

c# - 如何获取记事本文件保存位置

c# - ComboBox.SourceUpdated 事件未触发

java - FilteredList 在更新时给出 java.lang.ArrayIndexOutOfBoundsException

c# - WPF ComboBox 绑定(bind)到 ObservableCollection