【问题标题】: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' 控件进行导航。

    【讨论】:

      猜你喜欢
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 2014-10-28
      • 1970-01-01
      相关资源
      最近更新 更多