首页 > 解决方案 > 如何从 MasterPage 推送异步?

问题描述

我有目前使用事件驱动方法的 MasterPage,如下所示:

MasterPage.xaml.cs

private void TapHome_Tapped(object sender, EventArgs e)
    {
        Detail = new NavigationPage(new HomePage());
        IsPresented = false;
    }

应用程序.xaml.cs:

public App()
    {
        InitializeComponent();

        if (!string.IsNullOrEmpty(Preferences.Get(Constant.Setting_AccessToken, "")))
        {
            MainPage = new MasterPage();
        }
        else if (string.IsNullOrEmpty(Preferences.Get(Constant.Setting_UserEmail, "")) && 
            string.IsNullOrEmpty(Preferences.Get(Constant.Setting_Password, "")))
        {
            MainPage = new NavigationPage(new LoginPage());
        }

    }

由于我们试图迁移到 MVVM 方法。我们试图更改代码:

MasterPage.xaml.cs

public MasterPage()
    {
        InitializeComponent();
        BindingContext = _viewModel = new MasterViewModel()
        {
            Navigation = Navigation
        };
        //IsPresented = false;
    }

MasterViewModel.cs:

public ICommand HomeCommand { get; private set; }

    public ICommand ActivitiesCommand { get; private set; }

    public ICommand ChangePasswordCommand { get; private set; }

    public ICommand LogoutCommand { get; private set; }

    public MasterViewModel()
    {
        HomeCommand = new Command(async () => await GoToHome());
        ActivitiesCommand = new Command(async () => await GoToActivities());
        ChangePasswordCommand = new Command(async () => await GoToChangePassword());
        LogoutCommand = new Command(async () => await Logout());
    }

    public async Task GoToHome()
    {
        // Attempt 1:
        // Navigation.PushAsync(new NavigationPage(new HomePage()));

        // Attempt 2:
        // Application.Current.MainPage = new NavigationPage(new HomePage());
    }

尝试了第一次尝试,我们在 Android 上出现错误 - System.InvalidOperationException: PushAsync 在 Android 上不受全球支持,请使用 NavigationPage。

尝试了第二次尝试并正常工作,但单击主页或其他页面后没有导航。

有任何想法吗?

标签: xamarinmvvm

解决方案


没关系。我们解决了这个问题:

public async Task GoToHome()
    {
        ((MasterDetailPage)Application.Current.MainPage).Detail = new NavigationPage(new HomePage());
        ((MasterDetailPage)Application.Current.MainPage).IsPresented = false;
    }

推荐阅读