在我的Xamarin.Forms Prism应用程序中,我使用MasterDetailPage进行导航。
当我在一个详细信息页面上时,我想导航到另一个详细信息页面,就像我从母版页中选择它一样。
App.xaml.cs中的初始导航:
protected override void OnInitialized()
{
...
NavigationService.NavigateAsync("MainPage/RootNavigation/MyFirstPage");
}
当我单击MyFirstPage上的快捷按钮时,我想转到MainPage / RootNavigation / MySecondPage。我能够达到的最接近的是使用绝对的Uri。
private async void OnShortcutTapped(MyModel sender)
{
...
await _navigationService.NavigateAsync(new Uri("http://myapp.com/MainPage/RootNavigation/MySecondPage", UriKind.Absolute), navigationParams, null, false);
}
这基本上得到了我想要的东西,但在以这种方式导航之后,如果我让Master可见并选择MySecondPage的菜单项,它会刷新详细页面,就好像它正在导航到页面一样。
是否有更好的方法来维护此导航,以便母版页知道MySecondPage已经显示并且它没有尝试重新加载它?
答案 0 :(得分:1)
虽然您的导航模式对我来说没有多大意义,但您可以通过在MasterDetailPageViewModel中调用导航命令来实现您想要的效果。你有很多方法可以做到这一点。您可以使用IEventAggregator向MasterDetailPageViewModel发送消息进行导航,也可以使用CompositeCommand调用MasterDetailPageViewModel上存在的DelegateCommand。
您可以在此处查看使用CompositeCommand的示例:https://github.com/PrismLibrary/Prism-Samples-Forms/tree/master/UsingCompositeCommands
您还可以在Xamarin Evolve会议中看到如何发送此示例中的消息:https://github.com/brianlagunas/Evolve2016SamplesAndSlides
另一种选择是从App.Current.MainPage ViewModel调用一个导航命令,后面跟着你的MyFirstPage代码。