Вопрос по visual-studio-2010, c#, wpf – ObservableObject или INotifyPropertyChanged для ViewModels

10

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

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

INotifyPropertyChanged требуется для реализацииPropertyChanged мероприятие

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

Ты думаешь, это ради простоты или есть логическая причина?

Ваш Ответ

3   ответа
15

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

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

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

Верно. Я смотрел на некоторые проекты, уже сделанные с использованием MVVM Light (редактировать, я перепутал фреймворки). Так что в моем случае я, вероятно, захочу его использовать. Благодарность Xavier
Или Mvvmfoundation.codeplex.com? Gabe
ObserveableObject, я полагаю, также реализован в MVVM Light. Robaticus
2

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

В противном случае, ты действительно не очень "СУХОЙ" (не повторяйся).

Редактировать - Случайно мысль

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

0

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

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

Похожие вопросы