Xamarin从viewmodel重新导航到主页显示空白页面

时间:2018-01-16 15:38:07

标签: c# xamarin navigation

当我从viewmodel重新导航到我的第一页(Called Mainpage)时,它会显示一个空白页面。

我知道这与堆栈有关但无论我尝试什么它都保持空白。有没有人有任何想法?我找到相关的线程,但不是以相同的方式。

主页构造函数:

    public Login()
    {
        InitializeComponent();
    }

viewmodel中的代码

await Application.Current.MainPage.Navigation.PopToRootAsync();
await Application.Current.MainPage.Navigation.PushAsync(new Login());

好的,以获取更多信息:

设置我的根页:

    public partial class App : Application
{

    public App()
    {
        InitializeComponent();
        NavigationPage navigationPage = new NavigationPage(new Login());  << Renamed mainpage to login after the suggestion over here 
        MainPage = navigationPage;
    }

我在登录后调用我的rootpage。我想确保我的代码在他/她的ADAL令牌过期之后注销我的用户。它会在我的viewmodel中出现:

var auth = DependencyService.Get<IAuthenticator>();
auth.logout();
await Application.Current.MainPage.Navigation.PopToRootAsync(true);

(没有pushAsync根本不导航并保持在当前页面。这在加载新页面并且用户登录后直接调用)

2 个答案:

答案 0 :(得分:0)

在你的App.c中,你应该定义一个NavigationPage通过导航堆栈的根目录。

让我们说:

public class App : Application
{
      public App ()
      {
            NavigationPage navigationPage = new NavigationPage (new MainPage ());
            MainPage = navigationPage;
      }
}

您的应用程序的根目录是MainPage。

只要您的应用程序调用了Navigation.PopToRootAsync();
方法,您就会返回到您的根页面。 (本例主页)
您不需要将主页推入堆栈,因为它已经存在,您将弹出除根之外的所有页面。 不会调用页面的构造函数,但您可以依赖显示页面时触发的Appearing事件。

答案 1 :(得分:0)

  

在App.cs中初始化静态NavigationPage变量

public class App : Application
{
    public static NavigationPage NavPage;

    public App ()
    {
        NavPage= new NavigationPage (new MainPage ());
        MainPage = NavPage;
    }
}
  

使用App.cs的NavigationPage变量从第三页导航主页

public partial class thirdPage : ContentPage
{
    public thirdPage ()
    {
        InitializeComponent ();
        main.Clicked += Main_Clicked;
    }

    private void Main_Clicked(object sender, EventArgs e)
    {
        App.NavPage.PopToRootAsync(true);
    }
}