So implementieren Sie die bedingte Navigation / Weiterleitung für eine Windows Universal-App in MVVM-Weg
-
21-12-2019 - |
Frage
Ich habe eine Windows-Universal-App, die sich anmeldet. Ein typisches Szenario mit dieser Art von Anwendung ist unterschiedliche Zustände. Ob zum Beispiel, ob der Benutzer erst zum ersten Mal angemeldet ist oder der Benutzer bereits vorher angemeldet ist und die App wieder wieder öffnet. Je nach Status sind hier die Aktionen
ifloggedin - Homepage anzeigen || IFNOTLOGGINDIN - AnmeldePage anzeigen
jetzt basierend auf dem Zustand (staatlich) müssen wir verschiedene Seiten anzeigen.
Meine Frage ist ähnlich zu Dieses wollte aber verstehen, wie sie in MVVM implementiert werden sollen, und was ist der richtige Ort, um diese bedingte Logik zu setzen.
In app.xaml.cs löst das Problem, löst das Problem, aber verwässert Ihre App.xaml.cs und verstößt gegen den MVVM, da ViewModel die Interaktionslogik nicht umschließt.
die Lösung, die ich versucht habe, ist
- .
- Erstellen Sie eine Zwischenseite (intermediate.xaml).
- Erstellen Sie entsprechende ViewModel (intermediateviewmoodel.cs) für das oben.
- In dem Konstruktor dieses ViewModel enthält die bedingte Anweisung, um zu entscheiden, welche Seite navigiert.
Lassen Sie uns davon ausgehen, dass ich meinen Zustand in der BOOL-Variablen habe, isloggedin. Wo soll ich den bedingten Scheck setzen?
Der Code in meinem intermediatviewmodel lautet wie folgt
generasacodicetagpre.Das Problem mit dieser Lösung ist jetzt Sie haben eine weitere Seite (intermediate.xaml) in Ihrem Backstack. Gibt es eine Möglichkeit, dies loszuwerden?
das und ähnliche Lösungen scheinen nicht mehr für Windows Universal-Apps (Windows 8.1 / Windows Phone 8.1) zu sein.
weiß jemand, wie man das auf dem richtigen Weg mit MVVM umgesetzt wird?
Lösung
Nun, in diesem Fall hält MVVM nicht, da dies vor dem ausgewählten Sicht passieren sollte.Warum erstellen Sie nicht eine Klasse ('Navigator
' oder was auch immer) mit Ihrer Logik, und Bereitstellung einer Eigenschaft ('InitialPage
'), die Sie in der App (anstelle der hart codierten ersten Seite) verwenden, um zur ersten Seite zu navigieren?Auf diese Weise behalten Sie Ihre Logik außerhalb der App-Klasse, und es gibt wenig Änderungen daran.