0

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

4

2 回答 2

0

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

于 2016-11-30T03:47:23.443 回答
0

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

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

或者,您可以在页面的 ViewModel 中执行相同的操作(推荐),但您需要确保在页面的 Xaml 文件中打开自动定位器。

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

于 2016-11-28T12:07:17.270 回答