PropertyChanged in der Praxis

Wenn Sie ein Abonnement des Magazins 'DATENBANKENTWICKLER' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.

PropertyChanged in der Praxis

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, dass beim Einblenden der Kundenliste ausgelöst wird, genutzt, um die Schaltfläche zum Löschen eines Listeneintrags zu aktivieren oder deaktivieren.

Hier wollen wir nun aber moderner vorgehen und Benutzeroberfläche und Anwendungslogik so weit wir 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, dass 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:

public bool KundeLoeschbar {
     get { return kundeLoeschbar; }

Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]