2

Webサービス呼び出しがあり、Webサービスがエラーを受け取ったときにUIbusyIndi​​catorステータスを更新したい!これは、viewmodelWebサービス呼び出しcompletedメソッドのコードです。

if (e.Error != null)
                {
                    MessageBox.Show(msg);
                    busyIndicator.IsBusy = false;
                    return;
                }

複数のスレッドがある場合に別のスレッドのUIオブジェクトを更新する方法を知っていますが、ビューモデルにbusyIndi​​catorへの参照がありません!

4

2 に答える 2

5

MVVMパターンの場合は、次のようにします

XAMLファイル

  <controlsToolkit:BusyIndicator BusyContent="Fetching Data Please Wait.." IsBusy="{Binding IsBusy}" >
            <Grid >....</Grid>
        </controlsToolkit:BusyIndicator>

ビューモデルクラス

private bool isBusy = false; 

public bool IsBusy 

{ 

    get { return isBusy; } 

    internal set { isBusy = value; OnPropertyChanged("IsBusy"); } 

いいえ、あなたはあなたのために仕事をするプロパティの値を設定する必要があります

ビューモデルのようなもの

    IsBusy = true; //or false

このようなことを試しましたか、つまりDispatcherを使用してUIを更新しましたか

private void btnClick_Click(object sender, RoutedEventArgs e)
{
busyIndicator.IsBusy = true;
//busyIndicator.BusyContent = "Fetching Data...";

ThreadPool.QueueUserWorkItem((state) =>
{
Thread.Sleep(3 * 1000);
Dispatcher.BeginInvoke(() => busyIndicator.IsBusy = false);
});
}
于 2012-08-20T11:04:02.573 に答える
1

ビジーインジケータコンテンツを文字列にバインドします。そして、表示したい値に設定します。

if (e.Error != null)
            {
                MessageBox.Show(msg);
                busyIndicator.IsBusy = false;
                IndicatorMessage = "There has been an error"
                return;
            }

また、XAMLでは、標準のバインディングを実行します。

于 2012-08-20T12:27:56.970 に答える