PropertyChanged in der Praxis

Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!

Der Artikel “Basics: PropertyChanged” zeigt, wie die Schnittstelle INotifyPropertyChanged funktioniert. In unserer Beispielanwendung Bestellverwaltung verwenden wir diese Schnittstelle an einer Stelle, wo wir einen Ribbon-Button in Abhängigkeit vom Wert einer Eigenschaft aktivieren und deaktivieren, die das PropertyChanged-Ereignis auslöst. Im vorliegenden Artikel zeigen wir, wie dies im Detail funktioniert.

Hintergrund

Unter Access war es üblich, den Zustand von Steuerelementen direkt per Code durch Ändern der entsprechenden Eigenschaft zu ändern. Das ist natürlich auch unter WPF/C# möglich. Allerdings gehört es dort zum guten Ton, die Definition der Benutzeroberfläche mit XAML und die Anwendungslogik in C#-Klassen voneinander zu trennen, und zwar in der Form, dass der Zustand der Benutzeroberfläche entweder direkt in XAML definiert wird oder aber durch die Bindung an Elemente der Anwendungslogik ermittelt wird. Keinesfalls jedoch sollten die Elemente der Anwendungslogik auf jene der Benutzeroberfläche zugreifen. Nun wollen wir in unserem Beispiel eine Schaltfläche im Ribbon, mit der man einen in einer Liste markierten Eintrag löschen kann, nur aktivieren, wenn die Liste auch im unteren Bereich des Fensters angezeigt wird. Ist das nicht der Fall, weil beispielsweise gerade die Details eines Kundendatensatzes dort abgebildet werden, soll die Schaltfläche deaktiviert sein. Unter Access hätte man nun ein Ereignis, das beim Einblenden der Kundenliste ausgelöst wird, genutzt, um die Schaltfläche zum Löschen eines Listeneintrags zu aktivieren oder zu deaktivieren.

Hier wollen wir nun aber moderner vorgehen und Benutzeroberfläche und Anwendungslogik so weit wie möglich voneinander trennen. Dazu legen wir im Code behind-Modul eine öffentliche Eigenschaft an, an die wir das IsEnabled-Attribut der betroffenen Ribbon-Schaltfläche binden. Den Wert dieser Eigenschaft stellen wir an einer geeigneten Stelle ein, in diesem Fall dem Ereignis Navigated des Frame-Objekts namens Workzone, das unsere verschiedenen Page-Objekte wie die Kundendetails oder die Kundenliste einblendet.

Umsetzung

Für die Umsetzung deklarieren wir zunächst eine Boolean-Variable namens kundeLoeschbar:

bool kundeLoeschbar;

Für diese legen wir eine öffentliche Eigenschaft namens KundeLoeschbar an und statten diese mit dem üblichen Getter und Setter aus. Dem Setter fügen wir gleich noch den Aufruf der Methode OnPropertyChanged hinzu und übergeben dieser mit einem neuen Objekt des Typs PropertyChangedEventArgs den Namen der Eigenschaft:

 

Schreibe einen Kommentar