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 时调用您的异步初始化方法。您可以使用当前代码作为指导:
您也可以尝试使用 Container.RegisterInstance 方法为视图提供预配置的 VM。
我正在尝试在导航完成后初始化 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 时调用您的异步初始化方法。您可以使用当前代码作为指导:
您也可以尝试使用 Container.RegisterInstance 方法为视图提供预配置的 VM。