Xamarin.forms 导航XamarinForms Prism 6时加载数据的最佳位置?

Xamarin.forms 导航XamarinForms Prism 6时加载数据的最佳位置?,xamarin.forms,prism-6,Xamarin.forms,Prism 6,Prism 6最酷的特点之一是深度链接和传递参数。在许多情况下,您可能希望使用此参数从web服务中查找数据。理想情况下,这将使用async/await来获取数据。在哪里做这件事最好?例如,OnNavigatedTo方法是一个void 虽然我还没有深度链接的理由,但我在NavigatedTo中的许多页面上进行了大量加载,而且效果非常好 以下是一个示例: public void OnNavigatedTo(NavigationParameters parameters) { if (para

Prism 6最酷的特点之一是深度链接和传递参数。在许多情况下,您可能希望使用此参数从web服务中查找数据。理想情况下,这将使用async/await来获取数据。在哪里做这件事最好?例如,OnNavigatedTo方法是一个void

虽然我还没有深度链接的理由,但我在NavigatedTo中的许多页面上进行了大量加载,而且效果非常好

以下是一个示例:

public void OnNavigatedTo(NavigationParameters parameters)
{
    if (parameters != null &&
        parameters.ContainsKey("MyKey"))
    {
        SomePrivateFieldInViewModel = (YourVariable)parameters["MyKey"];
        //SomeWork
    }

    GetItems();
}

private async void GetItems()
{
    try
    {
        SomeListInViewModel = await WebServices.GetEntity(SomePrivateFieldInViewModel);
        //SomeWork
    }
    catch (Exception ex)
    {
        //SomeWork
    }
}

但是您不需要等待对GetItems的调用,所以它并没有真正执行异步代码。你没有从编译器那里得到警告吗?没有任何警告。在运行时,OnNavigatedTo()将启动GetItems()并完成。(过早按ENTER键)完全不预热。在运行时,OnNavigatedTo()将触发GetItems()并完成。此时,GetItems()已在运行,并将继续执行其操作,直到完成为止。由于用户已经在屏幕/页面中,GetItems()在开始时还将isLoading设置为true(我的回答中没有这样做)。此isLoading是一个带有NotifyPropertyChange的bool,因此我的视图将显示一个加载控件。我不怀疑它会工作,但我希望代码在同步模式而不是异步模式下运行。我想知道这是否是因为您使用了异步void而不是异步任务。然而,如果你在谷歌上搜索“c#async void”,似乎会有很多帖子说这不是一件好事。