2012-04-10 2 views
7

Мне было любопытно, что было лучше всего делать с ViewModels. Лучше ли реализовать интерфейс INotifyPropertyChanged или получить от ObservableObject.ObservableObject или INotifyPropertyChanged on ViewModels

ObservableObject класс реализует INotifyPropertyChanged и выполняет некоторые из расточного кода, например RaisePropertyChanged.

INotifyPropertyChanged необходимо выполнить мероприятие PropertyChanged.

С моей точки зрения, более логично использовать ObservableObject, но в большинстве учебников они реализуют интерфейс INotifyPropertyChanged на своих ViewModel.

Считаете ли вы, что это ради простоты или существует логическая причина?

ответ

14

ObservableObject является частью Microsoft.Practices.Composite.Presentation - то есть призмы. Он также реализован в MVVM Light и MVVM Foundation.

INotifyPropertyChanged является частью System.ComponentModel - то есть он находится в основных библиотеках.

Итак, если вы еще не включили Призма или одну из других фреймворков, я бы придерживался INotifyPropertyChanged. Кажется, мало смысла включать его только для того, чтобы получить этот класс.

+1

ObserveableObject также реализован, я считаю, в MVVM Light. – Robaticus

+2

Или http://mvvmfoundation.codeplex.com/? – Gabe

+0

Действительно. Я смотрел на некоторые проекты, уже сделанные с использованием MVVM Light (редактирование я путал рамки). Поэтому в моем случае я, вероятно, захочу его использовать. Благодарю. – Xavier

0

Как правило, при прочих равных условиях я предлагаю идти с подходом, где вы реализуете интерфейсы по сравнению с классами предков. Вы можете реализовать столько интерфейсов, сколько пожелаете, но вы получаете только одного родителя, поэтому я предпочитаю использовать моего родителя «мудро». В случае, когда я могу получить то, что хочу реализовать интерфейс, я предпочитаю позже оставлять свои варианты открытыми для наследования.

+1

С чем-то вроде ObservableObject, если вы наследуете это, а затем нужно наследовать от другого класса, вы можете убедиться, что новый суперкласс наследуется от ObservableObject. –

1

Я бы зашел так далеко, чтобы сказать, что если вы реализуете много ViewModels, для реализации INotifyPropertyChanged требуется много сантехнического кода, и вам лучше создать собственный базовый класс ViewModel или использовать один из тех, которые были предоставлены вам картой MVVM (MVVM Light - моя выборка).

В противном случае вы действительно не очень «сухие» (не повторяйте себя).

Edit - Случайно мысль

Имейте в виду, что ObservableObject, как правило, только легче реализации вес тех же самых основных вещей класса ViewModel бы, давая вам INPC, но оставив некоторые из других вещей, которые вы может использоваться в полной ViewModel.

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