Ich hatte noch keine Gelegenheit, dies selbst auszuprobieren, aber wenn ich das nächste Mal ein Projekt mit einer großen Anforderung für INotifyPropertyChanged einrichte, habe ich vor, eine Postsharp Attribut, das den Code zur Kompilierungszeit einfügt. Etwas wie:
[NotifiesChange]
public string FirstName { get; set; }
Wird werden:
private string _firstName;
public string FirstName
{
get { return _firstname; }
set
{
if (_firstname != value)
{
_firstname = value;
OnPropertyChanged("FirstName")
}
}
}
Ich bin mir nicht sicher, ob das in der Praxis funktioniert, und ich muss mich hinsetzen und es ausprobieren, aber ich wüsste nicht, warum nicht. Möglicherweise muss ich es einige Parameter für Situationen akzeptieren, in denen mehr als ein OnPropertyChanged ausgelöst werden muss (wenn ich zum Beispiel eine FullName-Eigenschaft in der Klasse oben hatte)
Derzeit verwende ich eine benutzerdefinierte Vorlage in Resharper, aber selbst damit habe ich die Nase voll davon, dass alle meine Eigenschaften so lang sind.
Ah, eine schnelle Google-Suche (die ich hätte durchführen sollen, bevor ich dies schrieb) zeigt, dass mindestens eine Person so etwas schon einmal gemacht hat aquí . Nicht genau das, was ich im Sinn hatte, aber nahe genug, um zu zeigen, dass die Theorie gut ist.
0 Stimmen
Siehe stackoverflow.com/questions/1329138/ für eine compilergeprüfte Art der Implementierung von INotifyPropertyChanged. Vermeidung von Eigenschaftsnamen als magische Zeichenkette.
8 Stimmen
code.google.com/p/notifypropertyweaver kann von Nutzen sein
9 Stimmen
Obiger Link ist tot. github.com/SimonCropp/NotifyPropertyWeaver
1 Stimmen
Obwohl ich adäquate Alternativen hatte, war nichts für mein Team so schmerzlos wie die Postsharp-Lösung Domänen-Toolkit (wird mit normalem Postsharp in der kommenden v3.0 gebündelt werden, denke ich). [NotifyPropertyChanged] auf die Klasse, [NotifyPropertyChangedIgnore] auf die Requisiten zu ignorieren.
3 Stimmen
Sie könnten stattdessen DependencyObject und DependencyProperties verwenden. HA! Ich habe einen Witz gemacht.
0 Stimmen
@Codest und jetzt ist dein Link tot
7 Stimmen
@joao2fast4u github.com/Fody/PropertyChanged/wiki/
0 Stimmen
Ich stimme mit dem Auftraggeber überein. Es ist wirklich traurig, dass es das in Roslyn noch nicht gibt. Außerdem muss es eine Möglichkeit geben, zu vermerken, dass eine Eigenschaft vom Wert einer anderen abhängig ist (idealerweise mit Attributen und dem nameof-Operator).
6 Stimmen
Zu dieser Zeit war es nicht möglich, Änderungen an C# vorzunehmen, da wir ein riesiges Backlog mit Abhängigkeiten hatten. Damals, als MVVM geboren wurde, haben wir uns nicht sonderlich um die Lösung dieses Problems bemüht, und ich weiß, dass das Patterns & Practices-Team ein paar Versuche unternommen hat (daher haben Sie auch MEF als Teil dieses Forschungs-Threads erhalten). Heute denke ich, dass [CallerMemberName] die Antwort auf das obige Problem ist.
0 Stimmen
Ich glaube, @tom-gilder hat eine bessere Antwort. stackoverflow.com/a/18002490/4062881
0 Stimmen
ObservableCollection
eliminiert die Notwendigkeit der ImplementierungOnPropertyChanged
für einfache Situationen. Siehe So geht's: Erstellen und Binden an eine ObservableCollection y ObservableCollection .