【问题标题】:Best place to load data when navigating XamarinForms Prism 6?导航 XamarinForms Prism 6 时加载数据的最佳位置?
【发布时间】:2016-12-01 03:05:34
【问题描述】:

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

【问题讨论】:

    标签: xamarin.forms prism-6


    【解决方案1】:

    虽然我还没有深度链接的案例,但我在 OnNavigatedTo 内的许多页面上进行了许多加载,并且效果很好!

    这是一个示例:

    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 的布尔值,因此我的视图将显示一个加载控件。
    • 我不怀疑它会起作用,但我希望代码以同步模式而不是异步模式运行。我想知道是不是因为你有 async void 而不是 async Task。但是,如果你用谷歌搜索“c# async void”,似乎有很多帖子说这不是一件好事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多