C# INavigationService作为主页面构造函数参数

C# INavigationService作为主页面构造函数参数,c#,unity-container,xamarin.forms,prism,uwp,C#,Unity Container,Xamarin.forms,Prism,Uwp,我有Prism模板中的基本Prism/Unity/Xamarin表单应用程序 如果我更改以下(添加参数),它将失败 容器可以工作,但以这种方式获取导航服务会导致找不到主页 ContentPage是否有更好的方式获得导航服务,以便单击按钮可以导航到新页面 我还尝试从OnInitialized注册导航服务,正如我在一些示例中发现的那样,这是一个编译错误 使用以下软件包/版本: Prism.Unity.Forms 6.2.0.pre4 Prism.表格6.1.0.4 Xamarin.表格2.2.0.

我有Prism模板中的基本Prism/Unity/Xamarin表单应用程序

如果我更改以下(添加参数),它将失败

容器可以工作,但以这种方式获取导航服务会导致找不到主页

ContentPage是否有更好的方式获得导航服务,以便单击按钮可以导航到新页面

我还尝试从OnInitialized注册导航服务,正如我在一些示例中发现的那样,这是一个编译错误

使用以下软件包/版本:

  • Prism.Unity.Forms 6.2.0.pre4
  • Prism.表格6.1.0.4
  • Xamarin.表格2.2.0.45
  • 统一4.0.1
  • Windows10UWP

Prism是一个框架,可帮助您使用创建应用程序。如果您仔细阅读MVVM和使用的实践,您会注意到页面中的代码应该保持在最低限度,并且逻辑被移动到viewmodel

将此应用于代码时,不应将
INavigationService
添加到页面中,因为导航应在viewmodel中完成

现在我听到你在问:“但是我如何从点击到viewmodel?”。这是通过使用命令完成的

<Button Text="Navigate to speak page" Command="{Binding NavigateToSpeakPageCommand}" />

我建议您查看一下Prism存储库中的文档和示例:

  • :在您的第一页和导航栏上逐步显示
  • (不是官方示例,但演示了如何进行导航)

你能发布一个可以重现这个问题的基本演示吗?下面的答案帮助我找到了问题所在。谢谢你对这个话题的兴趣。你是对的,我走了一条捷径来让它快速工作。有趣的是,代码隐藏无法获得导航服务,但视图模型可以。感谢您这么快的帮助。您无法在视图中获取INavigationService的原因是为了保护您免受自己的伤害。阻止您尝试做您刚刚尝试做的事情:)
<Button Text="Navigate to speak page" Command="{Binding NavigateToSpeakPageCommand}" />