ViewModelKit.Fody

Makes WPF ViewModel classes smart by default. Implements INotifyPropertyChanged and DelegateCommands for auto properties, recognises dependent properties, connects property changed handlers.

Wahrscheinlich jedes WPF-Projekt nach dem MVVM-Muster (Model–View–ViewModel) hat irgendwo eine Klasse namens „ViewModelBase“. Sie dient als Basisklasse für alle ViewModel-Klassen der Anwendung und stellt meistens eine Implementierung der INotifyPropertyChanged-Schnittstelle bereit. Das beinhaltet mindestens, neben dem Ereignis, eine protected-Methode wie „OnPropertyChanged“ oder „RaisePropertyChanged“.

Aber das alleine macht es dem Programmierer noch nicht einfacher, wenn zahlreiche Klassen mit ebenso zahlreichen Eigenschaften zu implementieren sind, die teilweise voneinander abhängig sind (berechnete Eigenschaften).

Weitestgehend als Ersatz für meine laufzeitbasierte ViewModelBase-Klasse habe ich ein Fody-Add-in-Paket erstellt, das das Assembly nach dem Compilieren verändert und diese Funktionen direkt in das Assembly integriert, als ob du sie selbst in deinem Quelltext geschrieben hättest, nur dass du überhaupt nichts davon geschrieben hast.

Für Eigenschaften:

  • Löst das PropertyChanged-Ereignis aus, wenn sich der Wert einer Auto-Eigenschaft ändert (get; set;).
  • Löst das PropertyChanged-Ereignis auch für alle abhängigen Eigenschaften aus, die in ihrem get-Accessor auf eine andere benachrichtigende Eigenschaft oder deren Speicherfeld zugreifen.
  • Ruft OnPropertyNameChanged-Methoden auf, wenn sich die Eigenschaft geändert hat.
  • Ruft OnPropertyNameChanging-Methoden auf, bevor sich die Eigenschaft geändert hat, stellt den alten und neuen Wert bereit, mit der Option, den neuen Wert zu verändern oder abzulehnen.
  • Setzt die IsModified-Eigenschaft auf true, wenn sich eine andere Eigenschaft ändert, außer wenn IsLoaded false ist.
  • Löst das PropertyChanged-Ereignis aus und ruft andere Handler-Methoden asynchron auf (mit SynchronizationContext.Current.Post()), wenn die Eigenschaft virtual ist und die aktuelle Instanz von einem abgeleiteten Typ ist. Das lässt Entity Framework die Fremdschlüssel-/Navigationseigenschaften im dynamischen Proxy aktualisieren, bevor die Änderungsereignisse ausgelöst werden.

Für Commands:

  • Verbindet DelegateCommand-Eigenschaften mit ähnlich benannten OnCommandName- und CanCommandName-Methoden.
  • Löst das CanExecuteChanged-Ereignis aller DelegateCommands aus, die von einer Eigenschaft abhängig sind, d. h. die in ihrer CanCommandName-Methode die Eigenschaft oder ihr Speicherfeld lesen.

Future ideas are about adding data validation support once I figured out the way I want to use it.

Bitte lies die erweiterte Einführung mit Referenz und Beispielen auf der Repository-Seite.

Kompatibilität: .NET Ab Version 4.0

Download

master.zipAktueller Quelltext direkt von GitHub

Es gibt ein öffentliches Git-Repository von ViewModelKit bei GitHub. Dort sind auch Änderungen am Code dokumentiert.

Lizenz und Nutzungsbedingungen

Diese Software wird unter den Bedingungen der MIT-Lizenz veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download.

Statistische Daten

  • Erstellt am 2016-08-28.
  • Ca. 1 800 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 1 800 - 7 200 €