Laden...

Wie verschiedene Windows mit MVVM synchron halten?

Erstellt von JimStark vor 3 Jahren Letzter Beitrag vor 3 Jahren 399 Views
JimStark Themenstarter:in
309 Beiträge seit 2020
vor 3 Jahren
Wie verschiedene Windows mit MVVM synchron halten?

Hi,

nur ganz kurz eine Frage, ich weiß das wurde schon mehrfach durchgekaut, ich bin mir aber nicht sicher was "sauberer" ist:

Aus dem MainWindowViewModel rufe ich per Command ein zweites Fenster auf (OrderDetails), welches ein OrderDetailsViewModel als Context hat. Dem übergebe ich im Konstruktor das gewählte Order Objekt und das DB-Repository.


        public OrderDetailsViewModel(Order order, IDBRepo dbRepo)

Beim Speichern-Command im OrderDetailsViewModel will ich eine Aktualisierung im MainWindowViewModel anstoßen.

Mir fallen jetzt zwei Möglichkeiten ein:


public OrderDetailsViewModel(Order order, IDBRepo dbRepo, MainWindowViewModel parent)

==> ich übergebe die Referenz des Parents im Konstruktor und rufe dann eine Methode auf (z.B. refreshOrders,...)

Oder ich abonniere im MainWindowViewModel ein Event des OrderDetailsViewModels (z.B. DetailsSaved,...)

Was ist besser? Bzw. habt ihr einen besseren Vorschlag?
Danke!

16.835 Beiträge seit 2008
vor 3 Jahren

"Ganz sauber" übergibst Du gar keine Referenz per Konstruktor, sondern arbeitest mit Subscriptions.
Die Subscription hast Du dann in allen relevanten ViewModels, sodass diese synchron sind.

In WPF geht das über Reactive Extensions: https://github.com/dotnet/reactive
In anderen Frameworks wie zB Angular ist das bereits eingebaut; in WPF leider nicht.
Ein weiteres Projekt in der WPF Welt ist https://www.reactiveui.net/

Reactive WPF – Part 1 – Introduction to Reactive Extensions