を役に立てば幸い私は最近、非常に同じ問題を抱えていたし、これは私がやったことです:
ナビゲーションスタック:App.xaml.csで
public enum NavigationStacks {Authentication, Main}
を:
//Navigation stack when user is authenticated.
var mainPage = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var mainNavigation = new FreshNavigationContainer(MainPage, NavigationStacks.Main.ToString());
//Navigation stack for when user is not authenticated.
var splashScreenPage= FreshPageModelResolver.ResolvePageModel<SplashScreenPageModel>();
var authenticationNavigation = new FreshNavigationContainer(splashScreenPage, NavigationStacks.Authentication.ToString());
ここでは、活用することができますJames Montemagno's Settings Plugin
if (Settings.IsUserLoggedIn)
{
MainPage = mainNavigation;
}
else
{
MainPage = authenticationNavigation;
}
これまでのところ、すでに上記のコードを実行していました。しかし、問題のためのアイデアは、ルートページ、すなわちスプラッシュ画面以外の認証スタックをクリアすることです:
public static void PopToStackRoot(NavigationStacks navigationStack)
{
switch (navigationStack)
{
case NavigationStacks.Authentication:
{
var mainPage = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var mainNavigation = new FreshNavigationContainer(MainPage, NavigationStacks.Main.ToString());
break;
}
case NavigationStacks.Main:
{
var splashScreenPage= FreshPageModelResolver.ResolvePageModel<SplashScreenPageModel>();
var authenticationNavigation = new FreshNavigationContainer(splashScreenPage, NavigationStacks.Authentication.ToString());
break;
}
}
}
そして最後に、ここでは、ログアウトコマンド内のコードです:
private void Logout()
{
Settings.IsUserLoggedIn = false;
NavigationService.PopToStackRoot(NavigationStacks.Authentication);
CoreMethods.SwitchOutRootNavigation(NavigationStacks.Authentication.ToString());
}
私はより良いがあるかもしれません知っていますより効率的なアプローチです。しかし、それは私のために働いた。
スプラッシュページはxaml/C#のページまたはアクティビティですか?その活動の場合、これは動作しません。 –