2010-09-22 19 views
6

J'utilise le bit de code suivant dans un mode de cookie cutter, à travers des dizaines de classesHéritant d'une classe de base qui implémente INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

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

Toutes ces classes implémentent INotifyPropertyChanged. Pour faire taire mes alarmes DRY, récemment j'ai refacturé ces classes pour hériter de ma classe de base PropertyNotifier dont le seul but est de fournir NotifyPropertyChanged pour les classes qui en héritent - qui sont les dizaines de classes ViewModel dans mon énorme projet. Il se sent paresseux et un peu sale. Est-ce que je blesse la performance ou brise les bonnes pratiques de design? Je me dis que si la notification de modification était supposée être aussi simple, il y aurait déjà une classe de base dans le framework WPF qui fait ce que ma classe PropertyNotifier fait.

Notez que, pour de nombreuses raisons, j'ai eu des problèmes de performances avec la réactivité de mon interface utilisateur - principalement en raison d'un grand nombre de contrôles. Donc, je cherche à couper la graisse partout où je peux. Des idées?

Répondre

5

Il s'agit d'une classe de base très courante avec le développement WPF ou Silverlight et n'affectera pas sensiblement les performances. Le seul problème que j'ai avec PropertyNotifier en tant que classe de base résulte d'être limité à l'héritage unique, mais cela a tendance à être un problème rare avec le type de classe dont vous aurez besoin.

+0

Merci pour l'assurance: D – bufferz

3

Oui, c'est une pratique très courante. Pour une application à grande échelle, il devient nécessaire d'avoir ce type de classe de base. Nous avions également créé un BaseViewModel dans le même but; nous avons également mis en place beaucoup de code commun (à travers ViewModels) dans cette classe de base comme l'enregistrement, l'affichage des messages d'erreur, l'initialisation des objets proxy WCF etc.

+1

Je savais que les gens les utilisaient, mais je me suis retrouvé avec un semblable à BaseViewModel par hasard. C'est vraiment bien d'avoir une classe VM de base à mettre entre WPF et Entity Framework. Cela me sauve une tonne de travail. J'utilise le mien principalement pour générer un ObservableCollection depuis un EF ObjectSet, et garder une trace de l'ajout/suppression de nouveaux Ts, et un SelectedItem T en plus de la notification de propriété les choses que vous avez indiquées comme initialisation, objets proxy, etc – bufferz

2

Une autre mise en œuvre est le modèle classe du WPF Application Framework (WAF). Cela fait exactement la même chose.

+0

ce Jbe, qui ressemble à un grand cadre. Il semble que j'ai réinventé la roue! – bufferz