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

Xamarin.Forms+PRISM How to get the viewmodel instance related to a specific view?

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

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

我有这样的东西:

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

所以我的问题是:

有什么方法可以获取为特定视图创建的视图模型实例吗?

我想做一些类似于 Stephen Cleary 在他的 post 中提到的事情: http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html

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

这可能吗?

提前致谢

只需使用 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。