ich arbeite gerade an einem Datenbank abhängigen Projekt bei diesem ich versuchen möchte das mvvm Pattern möglichst sauber zu implementieren.
Zu meiner Frage:
Ich habe ein Model, in diesem werden regelmäßig Daten von einem Server aus einer Datenbank gelesen und in eine Liste hinzugefügt. Nun möchte ich vom Model aus, die Änderungen der Liste an das Viewmodel weitergeben, doch wie mache ich das am besten? Mein Vorschlag wäre gewesen, ein Event vom Model zum Viewmodel zu senden, welches dann die nötigen Informationen beinhalten. Wäre das der richtige Ansatz oder gibt es da bessere Methoden?
Andreas schildert bereits 2 Standard-Wege wie das ViewModel (VM) vom Model (M) lose gekoppelt 'angesprochen' werden kann.
Es ist eine allgemeine Frage, für die es noch keine Standardlösung (Pattern) gibt: Wie wird das Model (serverseitig) aktualisiert und wie gibt es die Änderungen an das ViewModel weiter. Sofern ein Timer im ViewModel bzw. im ViewModelService/Agent/Controler läuft, wie er ab und zu genannt wird, werden die Änderungen vom Client gepullt. Es gibt jedoch auch die Möglichkeit, dass Änderungen im Backend - auf dem Server oder in der Datenbank - (auch über einen Service) an den Client getriggert und damit gepusht werden.
Das Schlagwort heisst Reactive Extensions, wo das Observer Pattern eingesetzt wird. Näheres hierzu findest Du unter RX oder bzgl. einer Implemention zu MVVM und RX hier Reactive Extensions sind sehr mächtig und scheinen auf den ersten Blick recht kompliziert. Aber RX und MVVM sind eine feine Sache.
Das kann ich nur bestätigen. Rx ist eine enorme Bereicherung in diesem Umfeld. Ich hab auch kruzerhand den PRISM EventAggregator (sehr schweres Gerät) gegen 20 Zeilen Rx EventBus ausgetauscht. Wenn man sich einmal mit Rx angefreundet hat, will man nicht mehr ohne :-)