使用 MvvmCross 在 UWP 应用程序的 NavigationView 中启用后退按钮

Enable back button in NavigationView of UWP app with MvvmCross

我的 UWP 应用程序使用 MvvmCross 框架,并且有一个 NavigationView 带有主页面和详细信息页面,如您在插图和文件夹结构中所见。这两个页面都带有 [MvxSplitViewPresentation(SplitPanePosition.Content)] 注释以在内容端显示它们。现在我想在详细视图上添加一个工作后退按钮,但我不知道如何启用该按钮并返回导航。

信息:我的详细信息页面是通过在 MainViewModel 中调用 _navigationService.Navigate<DetailViewModel>(); 打开的。

├── ViewModels
│   ├── NavigatonRootsViewModel.cs
│   ├── MainViewModel.cs
│   └── DetailViewModel.cs
├── Views
│   ├── NavigationRoot.xaml
│   ├── NavigationRoot.xaml.cs
│   ├── Main.xaml
│   ├── Main.xaml.cs
│   ├── Detail.xaml
│   └── Detail.xaml.cs

NavigationView有一个内置的back button,你可以设置IsBackEnabled为True来显示它并订阅BackRequested事件来控制它里面的导航返回操作。

.xaml:

<NavigationView IsBackEnabled="True" BackRequested="NavigationView_BackRequested">
    ......
<NavigationView>

.cs:

更新:

查看代码,页面并没有加载到FrameContent中,NavigationView自带了Frame,可以参考这个使用VisualTreeHelper获取Frame。然后使用 GoBack() 方法返回。

private void NavigationView_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)
{ 
    //use the MyFindListBoxChildOfType method from the link.
    var MyFrame = MyFindListBoxChildOfType<Frame>(NaviView); 
    if (MyFrame.CanGoBack) 
    {
        MyFrame.GoBack();
    }
}

演示应用程序:DemoMvvmCrossNavigation