Xamarin.Forms + PRISM如何获取与特定视图相关的viewmodel实例?

时间:2017-01-12 00:37:12

标签: c# asynchronous mvvm xamarin.forms prism

我尝试在导航完成后初始化viewmodel实例。

为什么呢?因为我想从webservice中检索一些数据到视图中。

我有这样的事情:

await NavigationService.NavigateAsync(new Uri("http://myapp.com/MainNavigationPage/DashboardPage?initialized=true"
                                                             , UriKind.Absolute)
                                                    , useModalNavigation: false);

所以我的问题是:

有没有办法为该特定视图获取已创建的viewmodel实例?

我想做的事情就像Stephen Cleary在帖子中提到的那样: http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html

var context = (Instance of viewModel for my view);
await context.InitializeAsync();

这可能吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

只需使用INavigationAware接口并响应OnNavigatingTo / OnNavigatedTo方法即可加载数据。建议不要在ctor中加载异步数据。 OnNavigatingTo方法是当前6.3预览中可用的新方法。

另一种选择是覆盖ViewModelLocationProvider.SetDefaultViewModelFactory方法,并在首次创建VM时调用异步初始化方法。您可以使用当前代码作为指导:

https://github.com/PrismLibrary/Prism/blob/master/Source/Xamarin/Prism.Unity.Forms/PrismApplication.cs#L25

您还可以尝试使用Container.RegisterInstance方法为视图提供预配置的VM。