2010-10-09 4 views
0

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

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

ответ

3

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

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

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

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

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

1

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

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

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

2

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

+0

- А что такое 'MyCollection' - экземпляр ObservableCollection?Затем он обновит ссылку или содержимое? – TCM

+0

Если вы вызываете OnNotyfyPropertyChanged («MyCollection») при изменении ссылки на вашу коллекцию, тогда WPF будет отслеживать как изменения ссылок, так и содержимое. – levanovd

1

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

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

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

Смежные вопросы