Access zu EDM: INotifyPropertyChanged integrieren

Im Beitrag “Access zu EDM: Dateien erstellen” haben wir gezeigt, wie Sie mit einer einfachen Access-Prozedur aus einem Access-Datenmodell die für ein Entity Data Model notwendigen Dateien erzeugen können. Das Entity Data Model enthält nur die reinen Eigenschaften, welche die Felder der jeweiligen Tabellen repräsentieren. Manchmal benötigen Sie allerdings mehr als nur diese Eigenschaften – dann soll zum Beispiel die Schnittstelle INotifyPropertyChanged in der Entitätsklasse implementiert sein, um Änderungen in den Eigenschaften schnell in die Anzeige der Daten übermitteln zu können. Wie Sie die Access-Prozedur zum Erstellen des Entity Data Models entsprechend erweitern, zeigen wir Ihnen in diesem Artikel.

Unsere Entitätsklassen, die wir mit der Prozedur EDMDateienErstellen erzeugen, bestehen nur aus den reinen Feldern samt Attributen:

<Table("Anreden")>
Public Partial Class Anrede
     Public Property ID As System.Int32
     <Index(IsUnique:=true)>
     <StringLength(255)>
     <Required>
     Public Property Name As System.String
End Class

Für die Implementierung der INotifyPropertyChanged-Schnittstelle sind einige Erweiterungen notwendig, die wir in den folgenden Abschnitten hinzufügen.

Namespace hinzufügen

Um von der Form der Entitätsklasse, wie wir sie in der bisher verwendeten Prozedur erstellt haben, zu einer Form mit Implementierung der Schnittstelle IPropertyNotifyChanged zu gelangen, müssen wir einige Elemente zur Entitätsklasse hinzufügen. Das erste ist der Namespace, in der diese Schnittstelle definiert wird. Dazu passen wir die Funktion NamespacesFuerEntitaeten an, indem wir dieser einen Parameter namens bolINotifyPropertyChanged hinzufügen. Diesen werten wir in der Funktion aus und fügen, wenn diese den Wert True hat, noch die folgende Zeile hinzu:

Imports System.ComponentModel

In der Funktion sieht das wie folgt aus:

Public Function NamespacesFuerEntitaetenZusammenstellen(Optional bolINotifyPropertyChanged As Boolean) As String
     Dim strNamespaces As String
     If bolINotifyPropertyChanged Then
         strNamespaces = strNamespaces & "Imports System.ComponentModel" & vbCrLf
     End If
     ...
     NamespacesFuerEntitaetenZusammenstellen = strNamespaces
End Function

Implements-Anweisung hinzufügen

Als Nächstes wollen wir der Entitätsklasse die Implements-Anweisung hinzufügen, mit der wir festlegen, dass die Klasse die Schnittstelle INotifyPropertyChanged implementiert. Dieser Teil erfolgt in der Funktion EntityDataModelZusammenstellen, die wir von der Hauptprozedur EDMDateienErstellen aus aufrufen. Dazu fügen wir dem Aufruf die Übergabe des Parameters bolINotifyPropertyChanged hinzu:

Public Sub EDMDateienErstellen(bolEineDatei As Boolean, strContextname As String, _
         strUnterverzeichnisEntities As String, Optional bolINotifyPropertyChanged As Boolean)
     ...
     Set colMappings = EntityDataModelZusammenstellen(strDBSets, strEntities, strEntityNames, bolINotifyPropertyChanged)
     ...
End Sub

In der Funktion EntityDataModelZusammenstellen nehmen wir diesen Parameter im Funktionskopf entgegen und prüfen dann wieder per If…Then-Bedingung, ob bolINotifyPropertyChanged den Wert True hat. In diesem Fall fügen wir der Definition der Klasse in der Variablen strEntities(i) die Zeile Implements INotifyPropertyChanged hinzu:

Public Function EntityDataModelZusammenstellen(strDBSets As String, strEntities() As String, _
         strEntityNames() As String, Optional bolINotifyPropertyChanged As Boolean) As Collection
     ...
     For Each objMapping In colMappings
         With objMapping
             ...
             strEntities(i) = "<Table(""" & .Entities & """)>" & vbCrLf
             strEntities(i) = strEntities(i) & "Public Partial Class " & .Entity & vbCrLf
             If bolINotifyPropertyChanged Then
             If bolINotifyPropertyChanged Then
                 strEntities(i) = strEntities(i) & "    Implements INotifyPropertyChanged" & vbCrLf
                 strEntities(i) = strEntities(i) & vbCrLf
                 strEntities(i) = strEntities(i) & "    Public Event PropertyChanged As PropertyChangedEventHandler " _
                     & "Implements INotifyPropertyChanged.PropertyChanged" & vbCrLf
                 strEntities(i) = strEntities(i) & vbCrLf
                 strEntities(i) = strEntities(i) & "    Protected Overridable Sub OnPropertyChanged(propname As String)" _
                    & vbCrLf
                 strEntities(i) = strEntities(i) _
                     & "        RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propname))" & vbCrLf
                 strEntities(i) = strEntities(i) & "    End Sub" & vbCrLf
                 strEntities(i) = strEntities(i) & vbCrLf
             End If
     ...
End Function

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins DATENBANKENTWICKLER:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar