2012-04-10 12 views
7

Tenía curiosidad por saber qué era lo mejor que podía hacer con ViewModels. ¿Es mejor implementar la interfaz INotifyPropertyChanged o derivar de ObservableObject?ObservableObject o INotifyPropertyChanged en ViewModels

ObservableObject clase implementa INotifyPropertyChanged y hace un poco del código aburrido como RaisePropertyChanged.

INotifyPropertyChanged requieren implementar el evento PropertyChanged.

Desde mi punto de vista, parece más lógico usar ObservableObject, pero en la mayor parte del tutorial implementan la interfaz INotifyPropertyChanged en su ViewModel.

¿Crees que es por simplicidad o hay una razón lógica?

Respuesta

14

ObservableObject pertenece a Microsoft.Practices.Composite.Presentation - es decir, Prism. También se implementó en MVVM Light y MVVM Foundation.

INotifyPropertyChanged es parte de System.ComponentModel - es decir, está en las bibliotecas del núcleo.

Por lo tanto, si aún no está incluyendo Prism o uno de los otros frameworks me quedaría con INotifyPropertyChanged. Parece que tiene poco sentido incluirlo solo para obtener esta clase.

+1

Un ObserveableObject también se implementa, creo, en MVVM Light. – Robaticus

+2

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

+0

De hecho. Estaba viendo algunos proyectos ya hechos utilizando MVVM Light (edit confundí los frameworks). Entonces en mi caso probablemente querré usarlo. Gracias. – Xavier

0

Generalmente, con todo lo demás igual, sugiero ir con un enfoque en el que implementen interfaces frente a derivar de clases de antecesores. Puedes implementar tantas interfaces como desees, pero solo obtienes un padre, por lo que prefiero usar a mis padres "sabiamente". En el caso de que pueda obtener lo que quiero implementar una interfaz, prefiero dejar mis opciones abiertas para la herencia más adelante.

+1

Con algo como ObservableObject, si hereda de esto, y luego necesita heredar de otra clase, podría asegurarse de que la nueva superclase hereda de ObservableObject. –

1

Me atrevería a decir que si está implementando muchos ViewModels, se necesita una gran cantidad de código de plomería para implementar INotifyPropertyChanged, y sería mejor que cree su propia clase base de ViewModel, o use uno de los proporcionados para usted por un marco de MVVM (MVVM Light siendo mi marco de trabajo de elección).

De lo contrario, realmente no está siendo muy "SECO" (No se repita).

Editar - Accidentalmente un pensamiento

Tenga en cuenta que ObservableObject es por lo general sólo una implementación de un peso más ligero de las mismas cosas básicas una clase modelo de vista sería, dándole INPC, pero dejando de lado algunas de las otras cosas que podría usar en un ViewModel completo.

Cuestiones relacionadas