NavigationService.Navigate 在 Prism 中调用 UWP 时抛出异常

NavigationService.Navigate throwing exception when called in Prism for UWP

我正在为 UWP 使用 Prism,并且我已经从 PrismUnityApplication 对我的应用程序进行了基础分类。 我已经重写了 OnLaunchApplicationAsync 并且正在尝试调用

NavigationService.Navigate("HighlightsView", null); 

调用时,程序抛出异常,

{"The page name HighlightsView does not have an associated type in namespace Panda.UWP.Views\r\nParameter name: pageToken"}

我有一个名为 Views 的文件夹,并且在命名空间 Panda.UWP.Views 下有一个名为 HighlightsView 的视图。

这里有命名约定吗?因为如果我将视图从 HighlightsView 重命名为 HighlightsPage,那么一切似乎都运行良好!

简单的解决方案是将 HighlightsView.xaml 重命名为 HighlightsViewPage.xaml

Is there a naming convention to be followed here?

简短的回答是肯定的。 Windows 运行时的 Prism 指定了一个 ViewModelLocator 对象,可用于管理视图模型的实例化及其与视图的关联。这种方法的优点是只有一个 class 负责视图模型实例化。

ViewModelLocator class uses an attached property, AutoWireViewModel, to associate view models with views once this property is set to True. For more details about the convention please reference Dave's Tech Blog:

  • 视图模型与视图类型位于同一程序集中。

  • 视图位于 .Views 子命名空间中。

  • 视图名称以“Page”结尾。

  • 视图模型位于 .ViewModels 子命名空间中。

  • 视图模型名称与视图名称对应,以“ViewModel”结尾。

该博客还提供了如何覆盖 Prism 的默认约定,您可以参考。 Brian's blog 还描述了关于约定的类似内容以及如何更改它。