如何将INavigationService从父ContentPage ViewModel传递给子ContentView ViewModel?

时间:2016-11-28 10:50:26

标签: xamarin.forms prism-6

我正在使用Xamarin Forms和Prism。我在页面之间的导航是使用Prism INavigationService完成的。我有一个Xamarin Forms ContentPage,其中包含许多具有自己的View Models的子ContentView。当我单击一个子ContentView时,我想导航到另一个ContentPage,其中包含来自子ContentView的一些属性。我想知道是否可以将父视图模型INavigationService传递给子ContentView视图模型?或者是否有其他最佳实践可以用来满足我的要求?

2 个答案:

答案 0 :(得分:0)

您需要做的是在prismApplcation中注册页面,该页面通常是您的App.xaml 使用 RegisterForNavigation < 注册页面后页面>那么你可以在页面的构造函数中注入INavigationService,就像这样

private INavigationService _navigationService;
public MyPage(INavigationService navigationService)
{
   _navigationService = navigationService 
}

另外,您可以在页面的ViewModel中执行相同的操作(建议使用),但您需要确保在页面的Xaml文件中打开Autolocater。

如果您想在内容页面之间导航,则会出现这种情况。但是,在你的情况下,你有多个视图,每个视图都有自己的视图模型,虽然这有点违反规则,因为视图基本上可以从他们的页面共享视图模型,但如果你坚持这样,我唯一的建议,不查看您的代码,是使用您注册页面的同一容器为每个视图注册视图模型。使用 RegisterType<>(),您会发现将注入Inavigationservice。 我再一次认为你改变你的代码设计会更好。

答案 1 :(得分:0)

目前为我工作的唯一解决方法是我已断开子视图模型的自动接线。我在我的内容页面视图模型中创建了所有子视图模型作为成员变量,并将它们绑定到XAML中的视图。它现在正在运作。我不确定这是最好的做法。如果有人找到更好的解决方案,请告诉我。