So vermeiden Sie die manuelle Implementierung von INotifyPropertyChanged

8

Gibt es einen Weg, dies zu vermeiden? Ich habe viele Klassen, die an DataGridViews gebunden sind und sie sind nur eine einfache Sammlung von Eigenschaften mit Standard-Getter und Setter. Also diese Klassen sind sehr einfach. Jetzt muss ich die INotifyPropertyChanged-Schnittstelle für sie implementieren, die die Menge an Code sehr erhöhen wird. Gibt es irgendeine Klasse, die ich erben kann, um zu vermeiden, all diesen langweiligen Code zu schreiben? Ich stelle mir vor, dass ich meine Klassen von einer Klasse erben kann und die Eigenschaften mit einigen Attributen dekoriere und es die Magie macht. Ist das möglich?

Ich bin mir der aspektorientierten Programmierung bewusst, aber ich würde es eher objektorientiert machen.

    
Max 28.06.2010, 06:37
quelle

7 Antworten

4

Erstellen Sie eine Container-Basisklasse, zB:

%Vor%

Hinweis: sehr vereinfachter Code

    
leppie 28.06.2010, 06:44
quelle
9

Es kommt darauf an; Sie könnten PostSharp verwenden, um ein solches Attribut zu schreiben, das vom Weber umgeschrieben wird; Ich wäre jedoch versucht, es einfach manuell zu tun - vielleicht unter Verwendung einer üblichen Methode zur Handhabung der Datenaktualisierungen, d. h.

%Vor%

mit:

%Vor%     
Marc Gravell 28.06.2010 06:43
quelle
1

Ohne AOP, glaube ich nicht, dass es eine einfache Möglichkeit gibt, dies in Ihre bestehenden Klassen nachzurüsten. Wie auch immer Sie es tun, Sie werden mindestens alle Ihre Eigenschaften ändern müssen.

Ich verwende eine Basisklasse, die INotifyPropertyChanged mit einer OnPropertyChanged (string propertyName) -Methode erbt, um das Ereignis auszulösen. Ich verwende dann ein Visual Studio Code-Snippet, um Eigenschaften zu erstellen, die OnPropertyChanged im Eigenschaftensetter automatisch aufrufen.

    
Dr Herbie 28.06.2010 07:26
quelle
1

Hier ist eine ähnliche Lösung für Marc, die erweitert wurde, um mehrere Eigenschaften onpropertychanges und mehrere RaiseCanExecuteChanged

zu erlauben

einfachste Beispiel Verwendung

%Vor%

Erweitertes Beispiel, das mehrere Eigenschaftenaktualisierungen und mehrere Befehle verwendet

%Vor%

Das erweiterte Beispiel ruft OnProperty für den Vornamen und den vollständigen Namen auf und ruft RaiseCanExecuteChanged für command1 und command2

auf

base ViewModel-Code

%Vor%     
Anton 01.08.2011 05:14
quelle
0

Wenn Sie mit AOP umgehen können, können Sie PostSharp verwenden. Suchen Sie nach PostSharp INotifyPropertyChanged und Sie werden viele Artikel finden, die es erklären, wie und dies .

    
Jon Skeet 28.06.2010 06:41
quelle
0

Die Verwendung von Code gen (zB T4 ) ist ein anderer Weg. Überprüfen Sie die Diskussion unter: Automatische INotifyPropertyChanged-Implementierung durch T4-Code-Generierung? .

Ich benutze diese Methode, und es funktioniert gut.

    
codekaizen 28.06.2010 06:45
quelle
0

Ich habe gerade ActiveSharp - Automatic INotifyPropertyChanged gefunden, ich muss es noch verwenden, aber es sieht gut aus.

Um von seiner Website zu zitieren ...

  

Senden Sie Benachrichtigungen über Immobilienänderungen   ohne Angabe des Eigenschaftsnamens als a   Zeichenfolge.

Schreiben Sie stattdessen Eigenschaften wie folgt:

%Vor%

Beachten Sie, dass der Name der Eigenschaft nicht als Zeichenfolge angegeben werden muss. ActiveSharp erfasst das zuverlässig und richtig. Es funktioniert basierend auf der Tatsache, dass Ihre Property-Implementierung das Backing-Feld (_foo) durch Ref übergeben. (ActiveSharp verwendet diesen "by ref" -Aufruf, um zu identifizieren, welches Hintergrundfeld übergeben wurde, und aus dem Feld identifiziert es die Eigenschaft).

    
Ian Ringrose 01.06.2011 11:40
quelle