Xamarin.Forms的Prism:我无法解析navigationService,除非ViewModelLocator.AutowireViewModel =“True”

时间:2016-05-15 13:56:47

标签: xamarin.forms prism

已经被困了好几天......然后我发现了什么是问题

我有两个页面,一个是平板电脑,另一个是手机。由于它们具有不同的名称,因此使用ViewModelLocator.AutowireViewModel来共享相同的视图模型作为绑定上下文不起作用。所以对于这种情况我使用经典绑定上下文,因为我不想为每个页面创建一个viewmodel副本。 我的问题是当我运行它时给我一个错误说“没有为此对象prism定义无参数构造函数”这个错误的原因是viewModel有一个期望navigationService的构造函数。 要解决这个错误,我必须删除导航服务作为参数,但后来我需要它,所以我可以用它导航。

1 个答案:

答案 0 :(得分:1)

在这种情况下,我建议使用ViewModelLocationProvider.Register方法。因此,在应用程序的RegisterTypes方法中,您可以设置类似于此的条件:

if (Device.Idiom == TargetIdiom.Tablet)
    ViewModelLocationProvider.Register("MainPage", () => your logic);
else
    ViewModelLocationProvider.Register("MainPage", () => your logic);

编辑:实际上,您仍然需要手动解决以这种方式执行的INavigationService。我打算重新开启你的棱镜问题。我们可以考虑改进ViewModelocationProvider.Register方法以启用此方案。