在我先浏览两个常规ContentPage之前,我不需要MasterDetail,在这里我收集MasterDetail将需要的信息。 ContentPages使用发送给OnNavigatedTo和OnNavigatedFrom的INavigationParameter来收集该信息。
SecondPage视图模型处理按钮命令,其中处理程序调用MasterDetail:
NavigationService.NavigateAsync(“ CompareSelectionsMasterDetail / CompareSelectionsNavigationPage / RangeCircle”, 参数);
当然,RangeCircleViewModel.OnNavigatedTo接收参数。但是,当我返回时(例如使用Android的“后退”按钮),它的OnNavigatedFrom被未调用,从而将空参数发送回去,从而使我的ContentPages不知道它们的状态。
CompareSelectionMasterDetail的视图模型不执行任何操作,而CompareSelectionsNavigationPage的视图模型仅执行以下操作:
public class CompareSelectionsNavigationPage : NavigationPage, INavigationPageOptions { public bool ClearNavigationStackOnNavigation => false; }
我不确定在MasterDetailPage XAML中有一个NavigationPage以及用Prism调用的单独的CompareSelectionsNavigationPage是什么意思,但是如果删除XAML,则不会渲染RangeCircle页面。如果我只有XAML,并将Prism导航更改为CompareSelectionsMasterDetail / NavigationPage / RangeCircle,那么我得到的行为与使用两个NavigationPages相同。
我的MasterDetail XAML很简单。
> <MasterDetailPage.Master>
> <NavigationPage Title="Required Foo" Icon="hamburger_icon.png">
> <x:Arguments>
> <ContentPage Title="Menu">
> <StackLayout Padding="40">
> <!-- TODO: // Update the Layout and add some real menu items -->
> <Label Text="Hello John"/>
> <Button Text="Range Circle" Command="{Binding NavigateToRangeCircleCommand}" CommandParameter="ViewA" />
> </StackLayout>
> </ContentPage>
> </x:Arguments>
> </NavigationPage> </MasterDetailPage.Master>
我可以找到的每个示例的Master Detail(尤其是Prism)从带有Master Detail页面的应用程序开始。我不确定我的用法是否会破坏OnNavigatedFrom? (基本上是ContentPage(Page1)-> ContentPage(Page2)-> MasterDetail-> NavigationPage-> NavigationPage-> ContentPage(RangeCircle))
各个ContentPages调用OnNavigatedFrom都没有问题。