Ich entwickle Win 8.1-Anwendung mit MvvmCross 3.5.1. Der Benutzer durchläuft die verschiedenen Ansichten sequenziell und kehrt von der letzten Ansicht zur ersten Ansicht zurück. Alles funktioniert perfekt während der ersten Iteration des Workflows. Wenn der Benutzer den Arbeitsablauf jedoch erneut startet, werden Init() - Methoden in Viewmodels nicht aufgerufen.Warum Init() -Methode wird nicht aufgerufen, wenn ich zum zweiten Mal zum ViewModel navigiere?
Zum Beispiel sieht die Interaktion zwischen FirstViewModel und SecondViewModel wie folgt aus.
FirstViewModel:
ShowViewModel<SecondViewModel>(
new
{
code = ItemCode,
descr = ItemDescription
});
SecondViewModel:
public void Init(string code, string descr)
{
...
}
So einfach funktioniert aber nur einmal :(
Welche Gründe ein solches Verhalten zur Folge haben kann
Wie w orkaround Ich habe versucht, laden Ansichtsmodell "von Hand":
var d = new Dictionary<string, string>
{
{"code", ItemCode},
{"descr", ItemDescription}
};
var b = new MvxBundle(d);
var r = new MvxViewModelRequest<SecondViewModel>(b, null, null);
var m = Mvx.Resolve<IMvxViewModelLoader>().LoadViewModel(r, null);
Es löste das Problem mit Init (Aufruf von Methoden). Aber ich weiß nicht, wie man das Viewmodel mit der Variablen m zeigt. Jeder weiß es?
Entschuldigung für mein schlechtes Englisch und danke im Voraus!
Ich weiß nicht, über mvvmcross, aber ich würde denken, dass Sie für die „Load“ Methode suchen oder „Loaded " Veranstaltung. – Kilazur
Wahrscheinlich, es sei denn, Sie löschen explizit die Ansicht, die sie initialisiert und beim Zurückgeben aus dem Speicher zurückgezogen hat, und werden nicht erneut initialisiert. –
Dieser Beitrag könnte Sie interessieren: http://stackoverflow.com/questions/17857543/mvvmcross-viewmodel-caching-and-re-initializing – momar