2012-07-13 193 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好,並支持過濾。如果您不斷添加和刪除項目,則可能需要過濾。