Window 8 App Store长时间运行的过程

时间:2013-01-23 18:25:40

标签: c# windows-8 winrt-xaml windows-store-apps

我有一个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并且异步函数在没有返回任何数据的情况下触发。

1 个答案:

答案 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