2010-09-22 17 views
6

He estado usando el siguiente fragmento de código de una manera cortador de galletas, a través de clasesLa herencia de una clase base que implementa INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

protected void NotifyPropertyChanged(string propertyName) 
{ 
    if (PropertyChanged != null) 
    { 
     PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Todas estas clases de decenas implemento INotifyPropertyChanged. Para silenciar mis alarmas DRY, últimamente he estado refaccionando estas clases para heredar mi clase base PropertyNotifier cuyo único propósito es proporcionar NotifyPropertyChanged para las clases que heredan de él, que son las docenas de clases ViewModel en mi gran proyecto.

Se siente flojo y un poco sucio. ¿Estoy perjudicando el rendimiento o rompiendo buenas prácticas de diseño? Me imagino que si se supusiera que la notificación de cambio fuera así de fácil, ya habría una clase base en el marco de WPF que hace lo que hace mi clase PropertyNotifier.

Tenga en cuenta que, por muchas razones, he tenido problemas de rendimiento con la capacidad de respuesta de mi IU, principalmente debido a una gran cantidad de controles. Así que estoy buscando recortar la grasa donde pueda. ¿Algunas ideas?

Respuesta

5

Esta es una clase base muy común en el desarrollo de WPF o Silverlight y no afectará notablemente el rendimiento. El único problema que tengo con PropertyNotifier como una clase base resulta de estar restringido a la herencia individual, pero eso tiende a ser un problema raro con el tipo de clase para el que lo necesitarás.

+0

Gracias por la tranquilidad: D – bufferz

3

Sí, es una práctica muy común. Para una aplicación a gran escala, es necesario tener este tipo de clase base. También creamos un BaseViewModel para el mismo propósito; también implementado una gran cantidad de código común (a través ViewModels) en esta clase base como la tala, mostrar mensajes de error, la inicialización de objetos proxy WCF etc.

+1

Sabía que la gente los estaba utilizando, pero terminé con un tipo de BaseViewModel similar por accidente. Es realmente agradable tener una clase base VM para poner entre WPF y Entity Framework. Me ahorra un montón de trabajo. Yo uso el mío principalmente para generar un ObservableCollection desde un ObjectSet EF, y sigo la pista de agregar/eliminar nuevas Ts, y un SelectedItem T además de la notificación de propiedad las cosas que señaló como inicialización, objetos proxy, etc. – bufferz

2

Otra aplicación es la claseModelo de la WPF Application Framework (WAF). Hace exactamente lo mismo.

+0

Gracias por publicar esta jbe, parece un gran marco. ¡Parece como si hubiera reinventado la rueda! – bufferz

Cuestiones relacionadas