[de] Beispiel gesucht für Datenbindung mit WPF

Topics: Technical Support
Jan 15, 2013 at 9:58 PM
Edited Jan 15, 2013 at 9:58 PM

Ich würde gerne Zyan für ein Projekt einsetzen. Leider finde ich hier kein Beispiel dafür, wie man eine WPF-Anwendung damit erzeugen könnte, die gebundene Steuerelemente hat.

Ich benötige ein DataGrid mit einer Liste meiner Kontakte. Wenn Client A einen neuen Eintrag auf dem Server macht, sollten alle Clients, die gerade auf die Kontaktliste schauen, diesen Eintrag mitbekommen - aber ohne dass alle Kontakte neu gelesen werden müssen.

Außerdem brauch ich die Funktion, wenn sich ein bestehender Einträg ändert, das diese Änderung dann auch bei allen anderen, die diesen Eintrag grad in der Liste haben, geändert wird.

Geht so was mit Zyan oder muss ich dafür doch auf das MVVM umsteigen und auf Zyan als Transportschicht verzichten?

Coordinator
Jan 16, 2013 at 11:50 AM

Hallo MyKey0815,

das sollte grundsätzlich funktionieren.

Lösungsvorschlag:

  • Alle Clients registrieren einen Callback zusammen mit einer eindeutigen Kennung bei der Serverkomponente
  • Wenn ein Client einen Eintrag über die Serverlogik ändert/erstellt/löscht, werden die anderen Clients über die registrierten Callbacks über die Änderung benachrichtigt
  • Die geänderten Daten sowie Typ (Löschung, Änderung, Neu) können als Parameter über den Callback an die Clients zurückgegeben werden
  • Der Client, welcher die Änderung vorgenommen hat, wird anhand der eindeutigen Kennung von der Benachrichtigung ausgeschlossen
  • Die benachrichtigten Clients können die Änderung dann in ihrer lokalen List<T> oder DataTable - oder wie auch immer die Daten vorgehalten werden - nachziehen
  • Über die Datenbindung werden dadurch automatisch die WPF-Steuerelemente aktualisiert

Anmerkung! Die Callbacks treffen asynchron (also nicht im GUI-Thread!) bei den Clients ein. Das bedeutet, dass man den Auruf an den GUI-Thread dispatchen muss. Das ist aber immer so bei asynchronen Operationen. Siehe dazu http://msdn.microsoft.com/en-us/library/ms741870.aspx

Ich hoffe das hilft weiter.

Gruß

Rainbird