Как сделать PushAsync из MasterPage? - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть MasterPage, который в настоящее время использует подход, управляемый событиями, следующим образом:

MasterPage.xaml.cs

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

App.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.

Попробовал вторую попытку и работал нормально, нонет навигации на главной странице или других страницах после нажатия на нее.

Есть идеи?

1 Ответ

0 голосов
/ 04 ноября 2019

Неважно. Мы разработали это:

public async Task GoToHome()
    {
        ((MasterDetailPage)Application.Current.MainPage).Detail = new NavigationPage(new HomePage());
        ((MasterDetailPage)Application.Current.MainPage).IsPresented = false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...