Arvind Chourasiya
Arvind Chourasiya

Reputation: 17422

How to push pages to MasterDetailPage using Mvvm

I want to use Mvvm(Basic Mvvm) for MasterDetailPage development. But facing issue to push new ContentPage to Detail

If I am using code behind than no issue, I can do like below

private void Button_Clicked(object sender, System.EventArgs e)
{
  Detail=  new NavigationPage(new Menu1Page());
}

But when it comes to Mvvm in ViewModel I don't have Detail page access there. So I can this, but it is hiding MasterDetailPage

async Task Menu1Page()
{
   await Xamarin.Forms.Application.Current.MainPage.Navigation.PushModalAsync(new Menu1Page());
}

So, how can push pages to Detail from Mvvm?

Upvotes: 0

Views: 1096

Answers (2)

Arvind Chourasiya
Arvind Chourasiya

Reputation: 17422

You can access Detail page too in ViewModel. Just you need to cast App.Current.MainPage as MasterDetailPage. Look at code below.

async Task NavigateNext()
{
   await (App.Current.MainPage as MasterDetailPage).Detail.Navigation.PushAsync(new Menu1Page());
   //(App.Current.MainPage as MasterDetailPage).IsPresented = false;
}

The above code snippet pushing pages as child of MasterDetailPage so that you can go back by pressing back arrow on Navigationbar.

You can set pages directly to Detail page, it shows pages at a first page of MasterDetailPage in this scenario back arrow wont be available to go back, like below

(App.Current.MainPage as MasterDetailPage).Detail = new NavigationPage(new Menu1Page());
//(App.Current.MainPage as MasterDetailPage).IsPresented = false;

Upvotes: 5

ypakala
ypakala

Reputation: 1209

By default, no.

You need to define BindingContext for the page, and use code-behind navigation.

Or use NavigationService, more details Enterprise App Navigation

Or use any Mvvm framework for this.

Upvotes: 0

Related Questions