【问题标题】:INavigationService as MainPage constructor argumentINavigationService 作为 MainPage 构造函数参数
【发布时间】:2016-06-06 21:14:21
【问题描述】:

我有来自 Prism 模板的基本 Prism/Unity/Xamarin Forms 应用程序。

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

public MainPage(INavigationService navigationService)
{
    InitializeComponent();
}

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

有没有更好的方法让 ContentPage 获得导航服务,以便单击按钮可以导航到新页面?

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

使用以下软件包/版本:

  • Prism.Unity.Forms 6.2.0.pre4
  • Prism.Forms 6.1.0.pre4
  • Xamarin.Forms 2.2.0.45
  • Unity 4.0.1
  • Windows 10 UWP

【问题讨论】:

  • 您能否发布一个可以重现此问题的基本演示?
  • 下面的答案帮助我找到了问题。感谢您对此主题的关注。

标签: c# unity-container xamarin.forms prism uwp


【解决方案1】:

Prism 是一个框架,可帮助您使用 MVVM 创建应用程序。如果您阅读 MVVM 和所使用的实践,您会注意到页面中的代码应保持在最低限度,并且逻辑已移至视图模型。

将此应用到您的代码中,您不应将INavigationService 添加到您的页面,因为导航应该从视图模型完成。

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

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

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

【讨论】:

  • 你是对的,我正在走捷径来快速完成这项工作。有趣的是,后面的代码无法获得导航服务,但视图模型可以。感谢您如此迅速地提供帮助。
  • 这个在View中获取不到INavigationService的原因是为了保护你自己。为了防止你试图做你刚刚想做的事情:)
猜你喜欢
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多