В чем разница между привязкой данных TwoWay и ObservableCollection? - PullRequest
0 голосов
/ 09 октября 2010

Когда я читал о ObservableCollection, я узнал, что он реализует INotifyPropertyChanged, что означает, что всякий раз, когда представление меняется, его базовая коллекция также обновляется автоматически, что и является целью привязки данных TwoWay.Итак, в чем разница между ObservableCollection и TwoWay привязкой данных?

Заранее спасибо:)

Ответы [ 4 ]

3 голосов
/ 09 октября 2010

Две «вещи» привязки данных TwoWay и ObservableCollection - это разные вещи, которые могут взаимодействовать, но не связаны напрямую.Привязка данных - это концепция, а ObservableCollection - реализация интерфейса (INotifyCollectionChanged), который используется при реализации концепции привязки данных в .NET Framework.Сам по себе INotifyCollectionChanged является небольшой частью этой реализации.

Фактически вы можете использовать привязку данных TwoWay без ObservableCollections и ObservableCollections без привязки данных.

Связывание данных - это механизм, позволяющий связать свойство бизнес-объекта(Часто свойство ViewModel) для свойства пользовательского интерфейса.OneWay Databinding обеспечивает поддержку обновления пользовательского интерфейса при изменении объекта (что требует реализации INotifyPropertyChanged и / или INotifyCollectionChanged для бизнес-объекта).TwoWay Databinding обеспечивает поддержку twoway, как следует из названия: Object => UI (как в OneWay) и UI => Object.Обновления пользовательского интерфейса в объект не требуют реализации ни INotifyCollectionChanged, ни INotifyPropertyChanged.

Наблюдаемая коллекция теперь интересна тем, что она реализует INotifyCollectionChanged, что делает ее хорошим кандидатом для создания коллекций, привязываемых к данным.Но я часто использую INotifyCollectionChanged без привязки к данным, и я уверен, что вы можете найти другие коллекции, которые реализуют INotifyCollectionChanged (например, PagedCollectionView)

Отвечает ли он на ваш вопрос?

2 голосов
/ 09 октября 2010

Если вы привяжете свою коллекцию следующим образом: {Binding Path = MyCollection, Mode = TwoWay}, тогда ссылка на коллекцию будет обновлена, но не на ее содержимое.Наблюдаемая коллекция позволяет отслеживать изменения содержимого, но не изменение ссылки (MyCollection.Clear() будет запускать обновление пользовательского интерфейса, но MyCollection = anotherInstance не будет).

1 голос
/ 09 октября 2010

Объект должен реализовать INotifyPropertyChanged, чтобы вы могли связываться со свойствами этого объекта.

TwoWayDatabinding сообщает механизму привязки данных, что ему нужно обновить свойства в обоих направлениях.

Вы сравниваете яблоки и самолеты. Это две совершенно разные вещи. Также ObservableCollection также реализует INotifyCollectionChanged, что позволяет уведомлять об измененных элементах, а не только свойства.

1 голос
/ 09 октября 2010

Вопрос немного похож на «в чем разница между лошадью и телегой?»

ObservableCollection можно использовать для привязки данных TwoWay (к ItemsControl).
Это более или менеепредназначен для упрощения привязки данных.

Всякий раз, когда элемент управления обновляет коллекцию ObservableCollection или наоборот, в середине находится привязка данных.

...