3

ビジー インジケーターを表示するコントロールの実装に問題があります。シナリオは次のとおりです。ビジー インジケーターと 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 は問題なくロードされますが、計算が短すぎると BusyIndi​​cator が表示されず、CallMe() メソッドが呼び出されてから Text が画面に表示されるまでの間にわずかな遅延が生じます。これは私の問題です。BusyIndi​​cator が非表示になる前に、Text プロパティが計算されて (画面に表示されて) 欲しいのです。

誰かがこれを行う良い方法を知っていますか、または私が従うことができるアドバイスはありますか??

4

2 に答える 2

1

busyindicator制御の必要性

DisplayAfter="0"
于 2011-07-18T14:51:43.223 に答える
1

DisplayAfterまた、ビジーインジケータが永久に表示されることがあり、 「0」に設定することで問題が解決したように見えるという同様の問題にも直面しました。

ステップ 1.ビジー インジケータを表示してから、javascript 関数を呼び出します。

BusyIndicator.IsBusy = true;
HtmlPage.Window.Invoke("foo", id);  

ステップ 2. Javascript 関数はポスト バックを実行し、ポスト バックが完了すると、Silverlight 関数を呼び出して次のように設定してビジー インジケーターを閉じます。

BusyIndicator.IsBusy = false;

問題:ビジー インジケータが実際に UI に表示される前に、javascript 関数が Silverlight 関数を呼び出してビジー インジケータを閉じます ( IsBusyjavascript を呼び出す前に true に設定しています)。

解決策:DisplayAfter xaml で値が に設定されていることを確認し00.00.00.1、次のように変更しました。

BusyIndicator.DisplayAfter = TimeSpan.Zero

コードビハインドで。これで私の問題は解決しました。HtmlPage.Window.Invokeしかし、同期呼び出しか非同期呼び出しかを確認したいですか?

ご意見ありがとうございます

于 2011-12-09T08:37:29.990 に答える