C# 带有WP8(MVVM)和异步web服务的进度指示器
我是异步编程的新手。 我正在创建WP8应用程序 我想要的 我想展示新闻等内容的列表。点击按钮时: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
到目前为止我拥有的: 引用的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();
}