INotifyPropertyChanged против DependencyProperty во ViewModel - PullRequest
346 голосов
/ 15 ноября 2008

При реализации ViewModel в WPF-приложении с архитектурой Model-View-ViewModel кажется, что есть два основных способа сделать его доступным для данных. Я видел реализации, которые используют DependencyProperty для свойств, с которыми будет связываться View, и я видел, как ViewModel реализует INotifyPropertyChanged.

Мой вопрос: когда мне отдавать предпочтение одному? Есть ли различия в производительности? Это действительно хорошая идея, чтобы дать зависимости ViewModel для WPF? Что еще нужно учитывать при принятии проектного решения?

Ответы [ 14 ]

4 голосов
/ 25 марта 2009

Кажется, что свойства зависимости должны использоваться в создаваемых вами элементах управления, таких как кнопки. Чтобы использовать свойства в XAML и использовать все функции WPF, эти свойства должны быть зависимыми.

Тем не менее, ваша ViewModel лучше использовать INotifyPropertyChanged. Использование INotifyPropertyChanged даст вам возможность иметь логику получения / установки, если вам нужно.

Я рекомендую проверить версию базового класса Джоша Смита для ViewModel, которая уже реализует INotifyPropertyChanged:

http://joshsmithonwpf.wordpress.com/2007/08/29/a-base-class-which-implements-inotifypropertychanged/

Я думаю, что это отличный пример того, как сделать ViewModel.

3 голосов
/ 28 марта 2011

Есть только одна причина, почему предпочтение отдается DependencyObject - привязка будет работать лучше. Просто попробуйте пример с ListBox и TextBox, заполните список данными из свойства INotifyPropertyChanged против DependencyProperty и отредактируйте текущий элемент из TextBox ...

3 голосов
/ 30 декабря 2008

Я предпочитаю более прямой подход, о котором я писал в Модель представления без INotifyPropertyChanged . Используя альтернативу привязке данных, вы можете привязать напрямую к свойствам CLR без какого-либо бухгалтерского кода. Вы просто пишете старый код .NET в своей модели представления, и он обновляется при изменении вашей модели данных.

1 голос
/ 04 февраля 2011

Если вы хотите предоставить свойства другим элементам управления, вы должны использовать свойства зависимости ... Но удачи, потому что им требуется время, чтобы выяснить ...

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