2012-04-10 8 views
7

Byłem ciekawy, co było najlepsze, co można zrobić z ViewModels. Czy lepiej jest zaimplementować interfejs INotifyPropertyChanged lub wyprowadzić z ObservableObject.ObservableObject lub INotifyPropertyChanged na ViewModels

ObservableObject klasy implementuje INotifyPropertyChanged i wykonuje kilka nudnych kodów, takich jak RaisePropertyChanged.

INotifyPropertyChanged Wymagana jest implementacja zdarzenia PropertyChanged.

Z mojego punktu widzenia wydaje się bardziej logiczne używać ObservableObject, ale w większości samouczków implementują one interfejs INotifyPropertyChanged na swoim ViewModel.

Czy uważasz, że jest to ze względu na prostotę lub jest jakiś logiczny powód?

Odpowiedz

14

ObservableObject jest częścią Microsoft.Practices.Composite.Presentation - np. Prism. Został również zaimplementowany w MVVM Light i MVVM Foundation.

INotifyPropertyChanged jest częścią System.ComponentModel - tj. Znajduje się w podstawowych bibliotekach.

Tak więc, jeśli nie zawierasz już pryzmatu lub jednej z innych frameworków, pozostanę przy INotifyPropertyChanged. Wydaje się, że nie ma sensu włączać go tylko po to, aby zdobyć tę jedną klasę.

+1

Obiekt ObserveableObject został również zaimplementowany w MVVM Light. – Robaticus

+2

Lub http://mvvmfoundation.codeplex.com/? – Gabe

+0

Rzeczywiście. Patrzyłem na niektóre projekty, które zostały już wykonane przy użyciu MVVM Light (edytuj I myliłem frameworki). Więc w moim przypadku prawdopodobnie zechcę to wykorzystać. Dzięki. – Xavier

0

Ogólnie rzecz biorąc, przy wszystkich pozostałych wartościach, sugerowałbym podejście, w którym implementuje się interfejsy, a nie klasy przodków. Możesz zaimplementować tyle interfejsów, ile chcesz, ale dostajesz tylko jednego rodzica, więc wolę używać mojego rodzica "mądrze". W przypadku, gdy mogę uzyskać to, co chcę zaimplementować w interfejsie, wolę pozostawić moje opcje otwarte na dziedziczenie później.

+1

Z czymś podobnym do ObservableObject, jeśli odziedziczysz po tym, a później będziesz musiał dziedziczyć z innej klasy, możesz zapewnić, że nowa superklasa dziedziczy z ObservableObject. –

1

Posunąłbym się nawet do stwierdzenia, czy implementujesz wiele modeli ViewModels, jest dużo kodu instalacyjnego niezbędnego do implementacji INotifyPropertyChanged, a lepiej byłoby utworzyć własną klasę podstawową ViewModel lub użyć jeden z tych dostarczonych dla ciebie przez framework MVVM (MVVM Light jest moim wyborem z wyboru).

W przeciwnym razie naprawdę nie jesteś bardzo "SUCHY" (nie powtarzaj się).

Edit - Przypadkowo myśl

Należy pamiętać, że ObservableObject jest zazwyczaj tylko lżejsze realizacja waga tych samych podstawowych rzeczy klasę ViewModel byłaby daje INPC, ale pomijając kilka innych rzeczy może użyć w pełnym ViewModelu.

Powiązane problemy