2016-11-28 81 views
0

我正在使用Xamarin Forms和Prism。我使用Prism INavigationService完成页面之间的导航。我有一个Xamarin Forms ContentPage和许多具有自己View Model的子ViewView。当我点击一个孩子ContentView时,我想用儿童ContentView的一些属性导航到另一个ContentPage。我想知道是否有可能将父视图模型INavigationService传递给子ViewView视图模型?还是有其他的最佳做法可以用来满足我的要求吗?如何从父ContentPage ViewModel将INavigationService传递给子ViewView ViewModel?

回答

0

你需要做的是,一旦你注册使用RegisterForNavigation <页的页面注册您的prismApplcation页面是useually你的App.xaml >,那么你可以在页面的构造就像注入INavigationService这

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

Alternativly你可以做同样的事情(推荐)在页面视图模型,但你需要确保在页面的XAML文件打开自动定位。

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

+0

嗨BraveHeart,感谢您的回复。注册仅适用于ContentPages,不适用于ContentViews。我的子对象是ContentView类型的。所以注册不起作用。 –

0

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

相关问题