2016-06-10 7 views
0

OK, also habe ich defaultPage, loginPage und pinCodePage.NavigateAsync im Konstruktor funktioniert nicht nach absoluter NavigateAsync

Ich navigiere zu DefaultPage von der OnInitialized-Methode. Das gewünschte Verhalten von hier ist, dass ich überprüfe, ob sie eingeloggt sind, wenn sie nicht dann auf die Login-Seite navigieren. Nach der Anmeldeseite müssen sie einen Pin setzen, um zur pinCodePage zu navigieren, und dann zur Standardseite zurückkehren. Jedes Mal, wenn die App geöffnet wird (außer bei Fortsetzen), sollte nach dem PIN-Code gefragt werden, damit Sie von defaultPage aus dorthin navigieren können. Die letzte Sache ist, dass sie sich auf der pinCodePage abmelden können, die sie zur loginPage bringen sollte.

Ich dachte, der einfachste Weg, dies zu tun, war eine Überprüfung in der defaultPage -Konstruktor, die zu loginPage navigieren würde, wenn nicht angemeldet oder auf die pinCodePage, wenn sie sind. (Ich dachte nicht, dass OnNavigatedTo gut war, weil es nach dem Zurückkommen von der pinCode-Seite ausgelöst werden würde, ohne dass irgendeine Logik es stoppen würde.) Das einzige Problem war, dass GoBackAsync den Konstruktor nicht erneut traf. Um dies zu beheben, habe ich absolute Navigation von der loginPage zur defaultPage versucht. Diese absolute Navigation von loginPage zu defaultPage funktioniert (nachdem viel über die Syntax für die Verwendung der URI rätselhaft ist, wird nirgends erklärt) aber defaultPage würde nicht zu pinCodePage navigieren, obwohl NavigateAsync im defaultPage-Konstruktor aufgerufen wird.

Kann jemand erklären, warum dieser NavigateAsync nach der absoluten Navigation nicht funktioniert?

Antwort

0

Das einzige Problem war, dass GoBackAsync nicht mit dem Konstruktor getroffen hat wieder

Natürlich nicht. Wenn Sie zurückgehen, erstellen Sie keine neue Instanz der Seite, sondern kehren zu einer vorhandenen Seite zurück.

https://github.com/PrismLibrary/Prism/blob/master/Documentation/Xamarin.Forms/3-NavigationService.md#navigating

:

nach viel über die Syntax für die Verwendung des URI rätselhaft, es ist nicht überall erklärt

Als Referenz finden Sie die absolute URI-Syntax ist in der Dokumentation gezeigt Meine Empfehlung ist keine Navigation innerhalb eines Ctors einer Seite. Warum eine DefaultPage haben, wenn sie beim App-Start einfach zu einer anderen Seite navigiert? Es hört sich so an, als sollten Sie sie nach der Anmeldung auf die PinCodePage bringen, und wenn Sie das eingerichtet haben, navigieren Sie zu einer absoluten URI für die DefaultPage.

+0

Zunächst einmal, vielen Dank für die Antwort und für Prismenformen Ich mag es wirklich. Ich wusste, dass das GoBackAsync nicht funktionieren würde, ich erklärte nur die Situation. Was den URI-Kommentar betrifft, so war mir als Junior-Programmierer nicht klar, was das URI-Format sein sollte. Ich versuche nicht zu hassen, nur eine Perspektive für Dinge zu geben, mit denen andere Probleme haben könnten. Zu sehen, was im Grunde eine URL für eine Webseite ist, verwirrte mich einfach. Ich habe das Schema und irgendetwas vor dem 3. Schrägstrich nicht verstanden und es geht darum, was du nach dem Schrägstrich hast. – Troto

+0

Der Grund, warum ich die defaultPage als erste Seite habe, liegt daran, dass meiner Meinung nach der Login und der PIN-Code modale Operationen sind, die über die erste Seite präsentiert werden sollten. Wenn das falsch ist, werde ich meinen Fehler gerne korrigieren. Warum ist Navigation in einem Konstruktor auch schlecht? Als eine Bonusfrage, während ich dich hier habe, gibt es jemals einen Grund, auf einen asynchronen Navigationsaufruf zu warten? – Troto

+0

Gibt es eine akzeptable Möglichkeit, die Navigation aufzurufen, wenn ein View-Modell erstellt wird, anstatt onnavigated zu verwenden? – Troto