MvvmCross ViewModel zwischenspeichern und neu initialisieren

Ich muss in der Lage sein, das Framework abzufangen und eine Neuinitialisierung durchzuführen, wenn ein ViewModel aus dem Cache neu geladen wird. Da das ViewModel nicht neu erstellt wird, kann ich weder die Methoden Init (), MvxViewModel.InitFromBundle noch MvxViewModel.ReloadFromBundle verwenden.

Ich versuche, eine Situation zu debuggen, in der durch Klicken auf die Schaltfläche "Zurück" ein ViewModel mit inkonsistentem Status wiederhergestellt wird. Eine Art von MvxViewModel.OnReloading () würde helfen.

Gibt es eine Möglichkeit, dies in Version 3 zu tun?

BEARBEITEN:

Angenommen, ich habe FirstPageViewModel, wodurch ein Befehl zum Navigieren zu SecondPageViewModel verfügbar gemacht wird. Basierend auf dem, was ich beobachte, wird FirstPageViewModel nicht erstellt, wenn Sie in SecondPageView auf die Schaltfläche "Zurück" des Simulators klicken. Stattdessen wird es, wie ich glaube, aus einem Cache abgerufen und dann an die Ansicht gebunden. Dieser Cache ist möglicherweise eine Implementierung des IMvxSingleViewModel-Caches.

Daher gilt der reguläre Ablauf nach der ViewModel-Konstruktion, bei dem Sie Init (), InitFromBundle () und ReloadFromBundle () aufrufen, in diesem Szenario nicht. Mit anderen Worten, ich brauche eine Möglichkeit, ein ViewModel neu zu initialisieren, unabhängig davon, ob es gerade neu erstellt oder aus einem Cache wiederhergestellt wurde. In diesem Fall kann ich eine Init () -Methode verwenden. Wenn letzteres zutrifft, gibt es keine Möglichkeit, dies im ViewModel selbst zu tun.

Das ist das Problem:

Ich habe eine Instanz von ICollectionService, die von FirstViewModel an SecondViewModel übergeben wird. FirstView enthält auch eine ListView, die an diesen CollectionService gebunden ist. Da CollectionService nicht stark typisiert ist, kann ich es weitergeben und die entsprechende Elementvorlage verwenden, um die Elemente in der Ansicht zu rendern.

Vor dem Anzeigen von SecondViewModel ruft FirstViewModel einige entfernte Daten ab und füllt den CollectionService. Wenn SecondViewModel angezeigt wird, werden in seiner Ansicht Daten aus dem CollectionService mit einer anderen Elementvorlage angezeigt. Wenn ich jedoch zurückschaue, da FirstViewModel immer noch auf den CollectionService verweist, rendert FirstView Daten, die von SecondViewModel verwendet wurden, sofern FirstViewModel nicht erneut initialisiert werden konnte, und löscht dabei den CollectionService. Vielleicht ist der Ansatz falsch, aber das ist der Kern meines Problems.

Ich weiß nicht, ob die Plattform einen Unterschied macht, da ich unter Windows Phone und iOS dasselbe Verhalten erwarten würde, wie bei dieser Neuinitialisierung im Core-Modul. Trotzdem sind dies Beobachtungen auf Android.

TIA.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage