如何切换根导航



我使用Xamarin Forms和freshmvvm。我有一个登录页面,登录后我推送下一页,比如说Page1,我想从现在开始成为root。因此,在导航到其他几个页面后,我希望能够回到Page1,调用CoreMethods.PopToRoot。注销时,我想返回登录页面并清除所有导航堆栈。这是我到目前为止尝试过的:

public class NavigationStacks
{
public static string LoginNavigationStack = "LoginNavigationStack";
public static string MainAppStack = "MainAppStack";
}
public App()
{
var page = FreshPageModelResolver.ResolvePageModel<LoginPageModel>();
var basicNavContainer = new FreshNavigationContainer(page, NavigationStacks.LoginNavigationStack);
var page2 = FreshPageModelResolver.ResolvePageModel<CustomerSearchPageModel>();
var appNavContainer = new FreshNavigationContainer(page2, NavigationStacks.MainAppStack);
MainPage = basicNavContainer;
}

登录后,我致电:

CoreMethods.SwitchOutRootNavigation(NavigationStacks.MainAppStack);
await CoreMethods.PushPageModel<CustomerSearchPageModel>();

它有效。我回到了第 1 页,无法返回登录页面。

注销时,我打电话:

CoreMethods.SwitchOutRootNavigation(NavigationStacks.LoginNavigationStack);

但什么也没发生。我想在清除导航堆栈的情况下导航回登录页面。我相信我错过了一些东西。谁能帮忙?提前感谢!!

克日什托夫

你有没有试过没有

await CoreMethods.PushPageModel<CustomerSearchPageModel>();

您不需要推送在NavigationStacks.MainAppStack上初始化的同一页面模型。

我没有看到你做错了什么。我也有类似的情况,我的CoreMethods.SwitchOutRootNavigation(NavigationStacks.LoginNavigationStack);工作得很好。

除了我第一次注销后 UI 元素消失了(但我跑题了;我需要启动自己的线程 LOL(。

最新更新