【发布时间】:2011-06-04 08:19:16
【问题描述】:
在 WPF 应用程序中,我有一个 ListView 绑定到我的 ViewModel 上的 ObservableCollection。
在应用程序运行期间,我需要删除并重新加载集合中的所有项目。我不需要添加或删除单个项目。
这提示了一个 ObservableCollection 是否真的必要的问题,以及我是否可以将 ListView 绑定到 IEnumerable 并在替换集合时调用 OnPropertyChanged?
由于 ObservableCollection 没有 AddRange 方法,在不替换集合的情况下重新加载的唯一方法是单独添加每个项目。由于每个添加的项目都会触发 CollectionChanged,这可能会对性能产生任何重大影响吗?
最后,由于我使用ICollectionView 来同步当前选中的项目,如果我做 替换集合,是否需要再次调用CollectionViewSource.GetDefaultView?我假设我可以重用现有的 CurrentChanged 处理程序。
谢谢 本
【问题讨论】:
-
我以前测试过这个。 ObservableCollection 比带通知的 List 更快。
-
@vorrtex - 有任何统计数据可以支持这一点吗?这是否适用于我正在考虑更换整个系列的情况?
-
使用类秒表自己尝试一下。性能问题只存在于显示项目中,并且由于 UI 虚拟化,许多项目不会改变任何内容。