Ich verwende MVVM Light und verwende Nachrichten, um zwischen ViewModels zu kommunizieren, um ein ViewModel wissen zu lassen, wenn es ok ist, etwas auszuführen. Mein Problem ist, dass ich für eine Nachricht registrieren und dann empfängt es mehrere Male. so von meinem Programm etwas mehr als einmal ausführen zu halten, muss ich boolesche Flaggen erstellen, um zu sehen, wenn es bereits empfangen wurde. Haben Sie eine Idee, warum das so ist und wie ich es stoppen kann?
Antworten
Zu viele Anzeigen?Stellen Sie sicher, dass Sie Ihre Message Handler abmelden, wenn Sie sie nicht mehr benötigen. Der Messenger behält einen Verweis auf die registrierten Methoden und verhindert so, dass sie in den Müll geworfen werden.
Daher gilt für ViewModels: Stellen Sie sicher, dass Sie Cleanup aufrufen, sobald Sie fertig sind (oder implementieren Sie IDisposable und rufen Sie Cleanup von dort aus auf).
Für Views (Controls, Windows, o.ä.) rufen Sie Messenger.Unregister in einem Ereignis auf, das beim Abriss der View auftritt, z.B. das Unloaded-Ereignis.
Dies ist ein bekanntes Verhalten der MVVM und wurde bereits an mehreren Stellen diskutiert.
Ich habe dieses Problem schon einmal gesehen. Es hatte damit zu tun, dass Messenger.Default.Register mehr als einmal aufgerufen wurde. Die MVVMLight Messenger-Klasse registriert das gleiche Element x-mal. Das ist der Grund, warum Sie beim Aufrufen von "Send" die Nachricht viele Male erhalten.
Weiß jemand, wie man verhindern kann, dass sich MVVMLight mehrfach registriert?
Wie bereits von anderen Teilnehmern erwähnt, wird dieselbe Meldung mehrfach registriert. Ich habe festgestellt, dass dieses Verhalten auftritt, wenn ich zur Ansicht X und dann zurück zur Ansicht Z navigiere, wo die Nachricht im Konstruktor des Z-ViewModels registriert wird. Eine Lösung besteht darin, die NavigationCacheMode Eigenschaft zu Erforderlich
<Page
........
........
NavigationCacheMode="Required">