如何使用Mvvm将页面推送到MasterDetailPage

时间:2018-11-08 07:52:05

标签: c# xamarin mvvm xamarin.forms

我想使用Mvvm(基本Mvvm)进行MasterDetailPage开发。但是面临将新的ContentPage推送到Detail

的问题

如果我在后面使用 code 没什么问题,我可以在下面做

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

但是在 ViewModel 中的Mvvm上,我没有 Detail 页面访问权限。所以我可以,但是它隐藏了MasterDetailPage

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

那么,如何将页面从Mvvm推送到Detail

2 个答案:

答案 0 :(得分:2)

您也可以在ViewModel中访问Detail页面。只是您需要将App.Current.MainPage强制转换为MasterDetailPage。看下面的代码。

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

上面的代码片段将页面作为MasterDetailPage的子代推送,以便您可以通过按Navigationbar上的向后箭头来返回。

您可以将页面直接设置为Detail页,在这种情况下,它会显示MasterDetailPage第一页的页面,后退箭头将无法像后退一样

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

答案 1 :(得分:0)

默认情况下,不。

您需要为页面定义BindingContext,并使用代码隐藏导航。

或使用NavigationService,更多详细信息Enterprise App Navigation

或为此使用任何Mvvm框架。