【问题标题】:Xamarin Forms - Access Prism INavigationService in View Model for Content ViewXamarin Forms - 在内容视图的视图模型中访问 Prism INavigationService
【发布时间】:2018-06-09 19:56:13
【问题描述】:

作为 Xamarin.Forms 应用程序的一部分,我实现了一个自定义导航标题。 Navigation Header 只是一个具有自己的视图模型的内容视图。需要参与应用程序导航体验的页面在其中包含此内容视图。

此应用程序使用 Prism 7 并在视图模型中执行导航,我想使用 Prism INavigationService。我遇到的问题是在导航内容视图的视图模型中获取对 INavigationService 的引用。

在 ContentPage 中访问 INavigationService 很简单,只需使用构造函数注入即可,问题是使用 prism 7 无法将 INavigationService 注入内容视图的视图模型 - 这已由 Brian Lagunas 在他的回复中确认到 Xamarin 论坛上的 this topic

在他的回复中,Brian 引用如下:

您不能将 INavigationService 注入 ContentView 的 VM。您应该公开一个可以从 VM 绑定到的属性,或者在加载 ContentView 时在代码中设置它。

考虑到上述情况,在内容视图的视图模型中获取对 INavigationService 的引用的方法是什么?我已经将 Content View 连接到其 View Model 正常工作。

【问题讨论】:

  • 如果You should either expose a property that you can bind to from your VM, or set it in code when the ContentView is loaded.没有回答你的问题是什么?
  • 我想我的问题是这两个建议的解决方案的可能实现可能/看起来像什么?
  • 我猜你正在创建自定义控件或一些你想重用的视图......你为什么不直接公开一些命令并在你的页面 xaml 和 viewmodel 中使用该命令在那里你可以使用 INavigationService?这对你有意义吗?
  • 是的,这是一个共享视图,基本上是 iOS 和 Android 应用程序顶部的导航区域。您指的是公开命令,这将来自我假设的共享视图模型?如果此命令的实现是在共享视图模型中,那么肯定会留下相同的场景,该命令将无权访问 INavigationService?
  • 或者您是指在共享视图上公开一个命令,然后在使用该视图的页面中实现该命令?如果是这样,这可能会奏效。由于几乎每个页面都会使用此视图,我希望避免在共享视图模型之外实现导航调用,但也许这是我无法避免的。

标签: xamarin xamarin.forms prism


【解决方案1】:

您已经提到无法在您的视图模型中为内容视图(您的自定义控件)使用INavigationService

解决此问题的最简单和最简单的方法之一是在您的内容视图(自定义控件)中添加可绑定命令,有了这个可绑定命令,您将能够使用该命令并从页面的 ViewModel 绑定到它。

通过这种方法,您可以在您的页面 ViewModel 中以标准方式使用 INavigationService,并根据您的 ContentView 中的命令执行从页面导航。

换句话说,当执行来自可重用视图的命令时,您可以处理来自 ViewModel 的导航。

有很多例子如何实现这一点,你可以从另一个SO thread使用这个。

祝你编码好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2020-06-20
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多