假设你有一个带有ObservableCollection(OC)的ViewModel,它被绑定到View中的某个控件。
有没有办法暂时禁用OC和Control之间的绑定而不删除绑定?我希望能够修改我的ObservableCollection,而不会让View知道它。
原因很简单:我在OC上做了很多Add()和Insert()操作。大多数时候一切都很好,但有时候我经常调用Add(),以至于视图中的更新看起来很不愉快。在这段时间里,我想事先“关闭”绑定并在之后“打开”。
是否有人处于类似情况/有人有提示吗?
答案 0 :(得分:4)
直接结束ObservableCollection
(甚至继承它),然后通过添加自定义逻辑来覆盖mthod OnCollectionChanged
,该逻辑将根据您的要求推迟事件触发,我相信这是一种非常标准的实现方式可观察的可观察集合。
答案 1 :(得分:1)
当我在集合中有很多项目时,我更喜欢使用List<>作为CollectionViewSource的源代码。然后视图绑定到CollectionViewSource.View。 CollectionViewSource具有DeferRefresh()和Refresh()方法,可以让您在没有视图通知的情况下完成更改源列表的所有后台工作。 CollectionViewSource的性能优于ObservableCollection,并且它支持过滤。如果您不断添加和删除项目,过滤可能就是您所需要的。