1

我有一个 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 的构造函数中调用 Get。

// View code

this.DataContext = _viewModel;

在视图的构造函数中调用。

就像我说的那样,this.DataContext = _viewModel调用了 get 行并且异步函数在不返回任何数据的情况下触发。

4

1 回答 1

3

你敢打赌,在我看来你可能不知道 ObservableCollection,一个内置 XAML 感知事件的通用列表。在向此类列表添加或删除时,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

于 2013-01-23T19:30:04.600 回答