1

假设您有一个带有 ObservableCollection (OC) 的 ViewModel,它绑定到 View 内的某个控件。

有没有办法在不删除绑定的情况下暂时禁用 OC 和控件之间的绑定?我希望能够在不通知视图的情况下修改我的 ObservableCollection。

原因很简单:我在 OC 上做了很多 Add() 和 Insert() 操作。大多数情况下一切正常,但有时我调用 Add() 的频率如此之高,以至于视图中的更新看起来令人不快。在这些时间段内,我想事先“关闭”绑定,然后再“打开”。

有没有人遇到过类似的情况/有人有小费吗?

4

2 回答 2

4

只需包装ObservableCollection(甚至从它继承),然后OnCollectionChanged通过添加自定义逻辑来覆盖 mthod,这将根据您的要求推迟事件触发,我相信这是实现自己的可延迟可观察集合的一种非常标准的方法。

于 2012-07-13T16:12:17.373 回答
1

当集合中有很多项目时,我更喜欢使用 List<> 作为 CollectionViewSource 的来源。然后视图绑定到 CollectionViewSource.View。CollectionViewSource 具有 DeferRefresh() 和 Refresh() 方法,可让您在没有查看通知的情况下完成更改源列表的所有后台工作。CollectionViewSource 的性能比 ObservableCollection 好得多,而且它支持过滤。如果您不断添加和删除项目,则可能需要过滤。

于 2012-07-13T18:20:02.440 回答