【发布时间】: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