Der ViewModel-Konstruktor wird bei der Navigation erneut aufgerufen, sodass Messenger-Abonnements erneut abonniert werden

Ich erstelle eine plattformübergreifende mobile Anwendung mitMvvmCross Rahmen.

Da ich Informationen zwischen ViewModels austauschen möchte, registriere ich Benachrichtigungen im ViewModel-Konstruktor mithilfe der integrierten FunktionMvxMessenger.
Nehmen wir eine Nachricht mit dem Namen anShowAdsMsgund dann sieht das ViewModel folgendermaßen aus:

public class AdsViewModel : BaseLookersViewModel, IAdsViewModel
{
    private MvxSubscriptionToken _showAdsMsgToken;

    public AdsViewModel()
    {
        _showAdsMsgToken = MvxMessenger.Subscribe<ShowAdsMsg>(message => onShowAdsNavigation(), MvxReference.Weak);
        MyMessenger.PublishLastMessage();
    }
    private void onShowAdsNavigation()
    {
        //Do Stuff
    }
}

Über dieMyMessenger Ding:
Die eigentliche Navigation zum ViewModel erfolgt vonMainViewModel.
Seitdem im Moment der Navigation selbst dieAdsViewModel existiert noch nicht, Meldungen vomMainViewModel kann es nicht erreichen.
Meine Idee war es, die Nachricht naiv zu "merken" und zu veröffentlichen, wenn das neue ViewModel fertig ist.
Also jetzt der Navigationsaufruf von derMainViewModel sieht so aus:

    private void navigate()
    {
        MyMessenger.RememberMessage(new ShowAdsMsg(this));
        ShowViewModel<AdsViewModel>( );
    }

Ich kann jetzt zum ViewModel navigieren und alle Benachrichtigungen werden erfolgreich abgefangen.

Jedoch...
Wenn ich die BACK-Taste am Gerät drücke und zum selben ViewModel navigiere,
Der Konstruktor wird erneut aufgerufen, und das Nachrichtenabonnement wird erneut ausgeführt.
Als Ergebnis, wenn eine Nachricht ankommtonShowAdsNavigation() Handler wird zweimal gefeuert!

ich fanddiese In einem ähnlichen Beitrag wird die Frage diskutiert, wie ein ViewModel ordnungsgemäß entsorgt werden kann.
aber es enthält keine direkte Lösung für mein Problem.

Was ich brauche, ist eine Lösung. Dies kann eine der folgenden sein:

Idee, wie Sie keine Nachrichten auf dem ViewModel-ctor abonnieren können.Anleitung zur korrekten Entsorgung des ViewModel.Erläuterung, warum der Konstruktor erneut aufgerufen wird und wie dies vermieden werden kann.Ein völlig anderer Ansatz für ViewModel-Informationsnachrichten.

Vielen Dank im Voraus für Ihre Hilfe!

Edit: Ich habe gefundendiese SO Answer, das im Wesentlichen die Nummer 3 in der obigen Liste beantwortet. Trotzdem frage ich mich, welchen Ansatz ich in Bezug auf das Messenger-Problem nehmen soll.

Noch ein Edit: Ich habe bestätigt, dass das gleiche Verhalten mit dem MvvmCross-Tutorial vorliegtN-05-MultiPage. Ich habe SecondViewModel einfach einen ctor hinzugefügt und nach jedem BACK + Renavigate einen Haltepunkt darin erreicht.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage