1

Azure に格納されているデータベースから約 360 のエントリを返す Web サービスがあります。私ModelViewは非同期呼び出しを行ってデータを取得しますが、ModelView非同期呼び出しが完了する前にバインディングが実行されます。

await に似たものを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 = _viewModelget が呼び出され、データを返さずに非同期関数が起動します。

4

1 に答える 1

3

XAML 対応のイベントが組み込まれている一般的な List である ObservableCollection についてご存じないように思われます。この種類のリストに追加または削除すると、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 に答える