2010-09-22 10 views
6

ich implementiert habe in einem Ausstecher Art und Weise das folgende Stück Code unter Verwendung von, in Dutzenden von Klassenvon einer Basisklasse erben, die INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged; 

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

dieser Klassen Alle implementieren INotifyPropertyChanged. Um meine DRY-Alarme zum Schweigen zu bringen, habe ich diese Klassen neu defactoriert, um meine Basisklasse PropertyNotifier zu erben, deren einziger Zweck darin besteht, NotifyPropertyChanged für Klassen bereitzustellen, die davon erben - das sind die Dutzende von ViewModel Klassen in meinem riesigen Projekt.

Es fühlt sich faul und ein bisschen schmutzig. Verletze ich Leistung oder breche gute Designpraktiken? Ich denke, wenn die Änderungsbenachrichtigung so einfach sein sollte, würde es bereits eine Basisklasse im WPF-Framework geben, die das tut, was meine PropertyNotifier-Klasse tut.

Beachten Sie, dass ich aus vielen Gründen Leistungsprobleme mit der Reaktionsfähigkeit meiner Benutzeroberfläche hatte - hauptsächlich aufgrund einer großen Anzahl von Steuerelementen. Also versuche ich, das Fett zu schneiden, wo immer ich kann. Irgendwelche Ideen?

Antwort

5

Dies ist eine sehr häufige Basisklasse in der WPF- oder Silverlight-Entwicklung und wird die Leistung nicht merklich beeinträchtigen. Das einzige Problem, das ich mit PropertyNotifier als Basisklasse habe, ergibt sich aus der Beschränkung auf einzelne Vererbung, aber das ist ein seltenes Problem mit der Art von Klasse, für die Sie es brauchen.

+0

Vielen Dank für die Beruhigung: D – bufferz

3

Ja, das ist sehr gängige Praxis. Für eine groß angelegte Anwendung wird es notwendig, diese Art von Basisklasse zu haben. Wir hatten auch einen BaseViewModel für den gleichen Zweck erstellt; wir implementiert auch eine Menge gemeinsamen Code (über Viewmodel) in dieser Basisklasse wie Logging, Fehlermeldungen anzeigt, WCF-Proxy-Objekte usw. Initialisierung

+1

Ich wusste, dass Leute sie verwendeten, aber ich endete mit einem ähnlichen BaseViewModel Art von Zufall. Es ist wirklich schön, eine Basis-VM-Klasse zwischen WPF und Entity Framework zu haben. Es spart mir eine Menge Arbeit. Ich benutze meins, um eine ObservableCollection aus einem EF ObjectSet zu generieren und verfolgen das Hinzufügen/Entfernen neuer Ts, und ein SelectedItem T zusätzlich zu der Eigenschaft Benachrichtigung die Dinge, die Sie wie Initialisierung, Proxy-Objekte usw. – bufferz

2

Eine weitere Implementierung ist die Modell Klasse der WPF Application Framework (WAF). Es macht genau dasselbe.

+0

Vielen Dank für die Veröffentlichung dieser JBE, der wie ein toller Rahmen aussieht. Es scheint, als hätte ich das Rad neu erfunden! – bufferz