我如何在子帧上使用MVVM的Light NavigationService,例如NavigationView控件中的子帧?

时间:2019-07-14 03:13:36

标签: c# uwp mvvm-light uwp-xaml navigationservice

MVVM Light随附的NavigationService系统似乎假设我要使整个窗口导航到另一页,但是,我希望有一个横杠,从中可以选择要转到的页面,例如手机应用中的汉堡菜单。也就是说,我只想使用NavigationView.Content内的此框架进行导航。

我可以通过将内容框架绑定到MainPageViewModel并使用它来进行导航,但是我宁愿使用MVVM Light提供的NavigationService来更好地学习它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

  

我可以通过将内容框架绑定到MainPageViewModel并使用它来进行导航,但是我宁愿使用MVVM Light提供的NavigationService来更好地学习它。

您的方向正确。即使您使用MVVMLight提供的NavigationService类,您仍然需要为其CurrentFrame属性提供内容框架实例。您可以在GitHub上查看其源代码。

例如,

var nav = ServiceLocator.Current.GetInstance<NavigationService>();
nav.CurrentFrame = YourframeControl;

在这里,我想为您提供一种简便的方法。您可以尝试使用WindowsTemplateStudio创建您的UWP项目。您可以选择“导航窗格”项目类型和“ Mvvm Light”设计模式。然后,您会发现“ WindowsTemplateStudio”已帮助您完成了所有相关的事情。在“ ShellPage.xaml”上,它具有用于导航的NavigationView控件。它还为您实现了NavigationServiceEx类。

ViewModelLocator.cs中:

public NavigationServiceEx NavigationService => SimpleIoc.Default.GetInstance<NavigationServiceEx>();

在“ ShellPage.xaml.cs”中:

ViewModel.Initialize(shellFrame, navigationView, KeyboardAccelerators);

这将与我上面的代码执行相同的操作。然后,当您使用NavigationService导航到其他页面时,它将使用'shellFrame'控件进行导航。