我有一个Web服务,它将从存储在Azure中的数据库中返回360个条目。在我的ModelView
中,我执行异步调用来检索数据,但ModelView
的绑定在异步调用完成之前执行。
在我继续将ModelView
绑定到我的视图DataContext
之前,有没有办法“等待”异步完成,这类似于等待?
// ModelView code
ServerSideModel.ProAmService.EntityServiceClient serviceClient = new ServerSideModel.ProAmService.EntityServiceClient();
serviceClient.GetPlayersPreviewCompleted += serviceClient_GetPlayersPreviewCompleted;
serviceClient.GetPlayersPreviewAsync(3);
在ModelView的构造函数中调用。
// View code
this.DataContext = _viewModel;
在视图的构造函数中调用。
就像我说的那样,调用行this.DataContext = _viewModel
并且异步函数在没有返回任何数据的情况下触发。
答案 0 :(得分:3)
你打赌,听起来像你可能不知道ObservableCollection,一个内置XAML感知事件的通用List。当您添加或删除此类型的列表时,XAML UI会自动反映更改。很美丽。像这样使用它:
// pretend your service returns this
class MyItem { public string Name { get; set; } }
// this is a property in your view model, bind your gridview to it
public ObservableCollection<MyItem> Items { get; set; }
// call this to load, it will continue to populate the UI until it is done
async System.Threading.Tasks.Task LoadAsync()
{
var _Results = await GetItemsAsync();
foreach (var item in _Results.OrderBy(x => x.Name))
this.Items.Add(item);
}
XAML开发的经验法则是,任何类型的列表都应升级到ObservableCollection,以便它可以轻松正确地绑定。
在此处阅读ObservableCollections:http://msdn.microsoft.com/en-us/library/ms668604.aspx 在此处阅读有关XAML绑定的更多信息:http://blog.jerrynixon.com/2012/10/xaml-binding-basics-101.html