【问题标题】:How can I use MVVM's Light NavigationService with subframes, like in NavigationView control?如何将 MVVM 的 Light NavigationService 与子帧一起使用,例如在 NavigationView 控件中?
【发布时间】:2019-07-14 03:13:36
【问题描述】:
MVVM Light 附带的 NavigationService 系统似乎假设我想让整个窗口导航到另一个页面,但是,我想要一个横向栏,我可以从中选择要转到哪个页面,例如手机应用程序中的汉堡菜单。也就是说,我只想使用 NavigationView.Content 中的这个框架进行导航。
我可以通过将内容框架绑定到 MainPageViewModel 并使用它进行导航来实现它,但我宁愿使用 MVVM Light 提供的 NavigationService 来更好地学习它。
感谢您的帮助!
【问题讨论】:
标签:
c#
uwp
mvvm-light
uwp-xaml
navigationservice
【解决方案1】:
我可以通过将内容框架绑定到 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' 控件进行导航。