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

C# Forms+PRISM如何获取与特定视图相关的viewmodel实例?,c#,asynchronous,mvvm,xamarin.forms,prism,C#,Asynchronous,Mvvm,Xamarin.forms,Prism,我正在尝试在导航完成后初始化viewmodel的一个实例 为什么??因为我想从webservice中检索一些数据到视图中 我有这样的想法: await NavigationService.NavigateAsync(new Uri("http://myapp.com/MainNavigationPage/DashboardPage?initialized=true" , Ur

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

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

我有这样的想法:

await NavigationService.NavigateAsync(new Uri("http://myapp.com/MainNavigationPage/DashboardPage?initialized=true"
                                                             , UriKind.Absolute)
                                                    , useModalNavigation: false);
所以我的问题是:

是否有任何方法可以获取为该特定视图创建的viewmodel实例

我想做一些像斯蒂芬·克利里在他的帖子中提到的事情:

这可能吗


提前感谢

只需使用INavigationAware界面并响应OnNavigationTo/OnNavigatedTo方法即可加载数据。不建议在ctor中加载异步数据。OnNavigationTo方法是当前6.3预览版中提供的一种新方法

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


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

我尝试使用OnNavigationTo实现这一点,但当调用InitiaizeAsync时,UI将被阻止,直到该函数的执行完成。现在我尝试了ViewModelLocationProvider.SetDefaultViewModelFactory,结果是一样的,方法调用正确,但我不知道如何在不阻塞UI的情况下执行。如果我使用这个选项,我就不会有这个问题:var context=我的视图的viewModel实例;wait context.InitializeAsync;但显然,这不是更好的方法。最后我想我找到了问题所在。我在每个页面之间使用绝对uri,所以在那段时间里,我唯一看到的是一个空白页面,持续2~3秒。在我使用相对URI之后,问题解决了一半。另一半问题解决了,将InitializeAsync函数放在OnNavigatedTo方法上,并调用Viewmodel构造函数上的加载指示器。谢谢你的帮助。
var context = (Instance of viewModel for my view);
await context.InitializeAsync();