0

実行時にデータグリッドを使用して複数のユーザー コントロールを読み込んでいるナビゲーション ページがあります。ユーザーコントロールのこれらのデータグリッドは、明らかにWCFによってロードされます。親コントロールに BusyIndi​​cator があり、BusyIndi​​cator の IsBusy プロパティを false に設定できるように、ユーザー コントロールが WCF からのデータの読み込みを完了したかどうかを確認する必要があります。どうすればいいですか?

4

1 に答える 1

0

これは、コントロールのデータを取得するメソッドの非同期コールバックで行う必要があります。たとえば、ViewModel に次のコードがあるとします (これは動作するコードではありません... 単なる例です)。

private bool _inProgress = true;

public bool InProgress
{
     get { return _inProgress; }
     set
            {
                if (_inProgress != value)
                {
                    _inProgress = value;
                    NotifyOfPropertyChange(() => InProgress);
                }
     }
}

public void GetData()
{
InProgress = true;
_wcfClient = myWCFDataClient;
_wcfClient.GetDataCompleted += _wcfClient_GetDataCompleted;
_wcfClient.GetDataAsync();
}

//Async callback
protected void _wcfClient_GetDataCompleted(object sender, MyCustomEventArgs e)
{
InProgress = false;
}

ビュー内の BusyIndi​​cator は、ViewModel の InProgress プロパティにバインドする必要があります。複数のコントロールによって複数のメソッドが呼び出されている場合は、高度な非同期パターンを調べることができます。いくつかのアイデアについては、こちらの投稿を参照してください: C# 4 の適切な非同期ワークフロー パターンはありますか? . 使用している C# のバージョンが不明です。以前の投稿へのリンクは、バージョン 4.5 のリリース前のものでした。

于 2013-04-16T08:21:56.610 に答える