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 Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]