MVVM: PropertyChanged ohne String-Parameter
erstellt am: 01. Feb 2011 | Tags: INotifyPropertyChanged, MVVM, PropertyChangedDas MVVM Pattern lebt davon und sonst geht’s auch kaum ohne, wenn die Oberfläche auf Änderungen von Eigenschaften im Code reagieren soll. Die Implementierung des Interfaces INotifyPropertyChangedist hier das übliche Vorgehen. Im gleichen Atemzuge wird eine Hilfsmethode verwendet, die das Event PropertyChanged feuert.
Eine Beispielimplementierung sieht wie folgt aus:
protected void RaisePropertyChanged(string propertyName) { var handler = PropertyChanged; if (handler != null) { handler.Invoke(this, new PropertyChangedEventArgs(propertyName)); } }
Der Aufruf sieht wie folgt aus:
RaisePropertyChanged("MyProperty");
Die Übergabe von Strings ist fehleranfällig, denn beim Umbenennen einer Eigenschaft vergisst man doch gern auch die Strings zu ändern. Um dies gleich bei dem Kompilieren feststellen zu können empfiehlt sich das folgende Konstrukt. Wobei es auch hier unterschiedliche Arten der Implementierung gibt.
protected void RaisePropertyChanged<T>(Expression<Func<T>> propertySelector) { var handler = PropertyChanged; if (handler != null) { var memberExpression = propertySelector.Body as MemberExpression; if (memberExpression != null) { handler.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name)); } }}
Und der Aufruf dazu:
RaisePropertyChanged(() => MyProperty);