ビジー インジケーターを表示するコントロールの実装に問題があります。シナリオは次のとおりです。ビジー インジケーターと TextBlock を持つ単純なビューがあり、これは ViewModel にバインドされます (次のようなものです)。
public class ViewModel
{
private bool _isbusy;
public bool IsBusy
{
get { return _isbusy; }
set
{
_isbusy=value;
OnPropertyChanged("IsBusy");
}
}
private string _text;
public string Text
{
get { return _text; }
set
{
_text = value;
OnPropertyChanged("Text");
}
}
public void CallMe()
{
IsBusy = true;
Text = Static.PerformCalculation();
IsBusy = false;
}
}
これまでのところ、すべて非常に単純ですよね?? 問題は、CallMe() のようなメソッドがある場合です。計算が行われている間、ビジー インジケーターを表示および非表示にする必要があります。その理由は、計算と IsBusy プロパティの通知が同じスレッドで行われたためだと考えたので、次のような結果になりました。
public void CallMe()
{
IsBusy = true;
Static.PerformCalculationAsync(CalculationCallback);
}
private void CalculationCallback(string result)
{
Text = result;
IsBusy = false;
}
ここで別のことが起こります。Busy Indicator は問題なくロードされますが、計算が短すぎると BusyIndicator が表示されず、CallMe() メソッドが呼び出されてから Text が画面に表示されるまでの間にわずかな遅延が生じます。これは私の問題です。BusyIndicator が非表示になる前に、Text プロパティが計算されて (画面に表示されて) 欲しいのです。
誰かがこれを行う良い方法を知っていますか、または私が従うことができるアドバイスはありますか??