2012-07-13 190 views
1

假设您有一个ViewModel,它具有绑定到View内的某个控件的ObservableCollection(OC)。打开和关闭绑定

有没有办法暂时禁用OC和控件之间的绑定,而不删除绑定?我希望有能力修改我的ObservableCollection,而不必通知View。

原因很简单:我在OC上做了很多Add()和Insert()操作。大多数情况下,一切正常,但有时我会频繁地调用Add()以致View中的更新看起来很不愉快。在这段时间内,我希望事先“关闭”绑定,然后“打开”。

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

+0

http://stackoverflow.com/a/5491534/546730(这有点哈克) – 2012-07-13 17:16:25

+0

@ H.B。谢谢:) – 2012-07-13 17:24:27

回答

4

就(从它甚至继承)包ObservableCollection,然后通过添加将推迟事件触发考虑您的要求定制逻辑覆盖mthod OnCollectionChanged,我相信这是实现自己的defferable观察到的集合一个非常标准的方式。

+0

+1这是标准的方式。通常命名为'BulkObservableCollection',使用额外的方法:AddRange。 – 2012-07-13 16:14:37

+0

你说得对。当然。有时你根本不会看到森林,因为树木(德国人的说法 - 希望英文中的意思相同):-) – 2012-07-13 16:15:06

1

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