Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有WP8(MVVM)和异步web服务的进度指示器_C#_Mvvm_Asynchronous_Windows Phone 8 - Fatal编程技术网

C# 带有WP8(MVVM)和异步web服务的进度指示器

C# 带有WP8(MVVM)和异步web服务的进度指示器,c#,mvvm,asynchronous,windows-phone-8,C#,Mvvm,Asynchronous,Windows Phone 8,我是异步编程的新手。 我正在创建WP8应用程序 我想要的 我想展示新闻等内容的列表。点击按钮时: 应出现进度指示器 应下载并显示数据 进度指标应该消失 到目前为止我拥有的: 引用的Web服务中的方法: void GetNewsAsync() { //... } viewModel中有两种方法: public void GetNewsFromService() { //call webservice //... client.GetNewsCompleted

我是异步编程的新手。 我正在创建WP8应用程序

我想要的

我想展示新闻等内容的列表。点击按钮时:

  • 应出现进度指示器
  • 应下载并显示数据
  • 进度指标应该消失
    到目前为止我拥有的:

    引用的Web服务中的方法:

    void GetNewsAsync() 
    {
        //...
    }
    
    viewModel中有两种方法:

    public void GetNewsFromService()
    {
        //call webservice
        //...
        client.GetNewsCompleted += client_GetNewsCompleted;
        client.GetNewsAsync(startDate);
    }
    
    void client_GetNewsCompleted(object sender, GetNewsCompletedEventArgs e)
    {
    //save result from webservice to db
    //update viewmodel property
    //...
    }
    
    视图中按钮“同步”的OnClick方法:


    一切正常(调用web服务,保存结果数据,更新列表,但是


    如何重新设计此代码以通知视图以隐藏进度指示器(当所有工作完成时)?

    客户端\u GetNewsCompleted
    应将类似于
    Completed
    的公共属性指定为true。然后,如果您在ViewModel中完全管理类似IsInProgress的属性,则它将更为MVVM,在
    GetNewsFromService
    中设置为true,在
    客户端\u GetNewsCompleted
    中设置为falseen只需将ProgressIndicator.Visibility绑定到该属性(使用转换器)。

    lisp有一个非常好的解决方案,我总是在所有ViewModels上使用一个基类,该基类有一个属性IsBusy(bool)。需要时,只需设置为true或false,您的视图就可以使用它来切换可见性
    void appBarSyncButton_Click(object sender, EventArgs e)
    {
        TurnOnProgressBar();
        _viewModel.GetNewsFromService();
        //TurnOffProgressBar();
    }