2010-10-09 23 views
0

正如我讀到ObservableCollection我知道它實現了INotifyPropertyChanged這意味着每當視圖更改它的底層集合也會自動更新這正是TwoWay數據綁定的目的。那麼,ObservableCollection和TwoWay數據綁定有什麼區別?TwoWay databinding和ObservableCollection有什麼區別?

感謝提前:)

回答

3

兩個「事物」TwoWay databinding和ObservableCollection是不同的東西,它們可以協作但不直接連接。數據綁定是一個概念,ObservableCollection是一個接口(INotifyCollectionChanged)的實現,用於在.NET框架中實現數據綁定的概念。 INotifyCollectionChanged本身就是這個實現的一小部分。

事實上,您可以在沒有數據綁定的情況下使用TwoWay數據綁定而不使用ObservableCollections和ObservableCollections。

數據綁定是一種機制,允許您將業務對象屬性(通常是ViewModel屬性)綁定到UI屬性。 OneWay Databinding在對象更改時提供了對UI更新的支持(這需要在業務對象上實現INotifyPropertyChanged和/或INotifyCollectionChanged)。雙向數據綁定提供雙向支持,如其名稱所示:Object => UI(如OneWay)和UI => Object。 UI到對象更新不需要實現INotifyCollectionChanged或INotifyPropertyChanged。因爲它實現INotifyCollectionChanged,這使得它一個很好的候選創建databindable集合

觀察到的集合,現在是有趣的。但我經常使用INotifyCollectionChanged沒有數據綁定,我敢肯定你可以找到其他實現INotifyCollectionChanged(如PagedCollectionView)的集合

它回答你的問題嗎?

1

的問題是有點像「什麼是馬和車之間的區別?」

ObservableCollection可以用於TwoWay數據綁定(到ItemsControl)。
它或多或少的設計使數據綁定變得容易。

無論何時控件更新ObservableCollection或其他方式,中間都有一個DataBinding。

2

如果你像這樣綁定到你的集合{Binding Path = MyCollection,Mode = TwoWay}那麼對集合的引用將被更新,但不會更新它的內容。可觀察集合允許跟蹤其內容更改,但不參考更改(MyCollection.Clear()將觸發UI更新,但MyCollection = anotherInstance不會)。

+0

- 什麼是MyCollection是ObservableCollection的實例?那麼它會更新參考或內容? – TCM 2010-10-09 09:55:29

+0

如果您在更改對集合的引用時調用OnNotyfyPropertyChanged(「MyCollection」),則WPF將跟蹤引用和內容更改。 – levanovd 2010-10-09 18:23:52

1

對象需要實現INotifyPropertyChanged,因此您可以綁定到此對象的屬性。

TwoWayDatabinding告訴數據綁定引擎它需要雙向更新屬性。

你正在比較蘋果和飛機。這是完全不同的兩件事。 另外ObservableCollection還實現INotifyCollectionChanged,允許通知其項目更改,不僅屬性。