2

こんにちは、テレリック ビジー インジケーターを MVVM で使用しようとしています。Mainwindow に Busy インジケータがあります。ウィンドウ内にあるユーザー コントロールの 1 つにアクション (ボタン クリック) があると、ユーザー コントロール ビュー モデルは MinwindowviewModel にメッセージを送信します。メッセージにビジー インジケータが表示されます。しかし、これは機能していません。なぜこれが機能しないのですか?

ユーザー コントロール ビュー モデル

public class GetCustomerVM : ViewModelBase
{
    private int _CustomerId;
    public int CustomerId
    {
        get { return _CustomerId; }
        set
        {
            if (value != _CustomerId)
            {
                _CustomerId = value;
                RaisePropertyChanged("CustomerId");
            }
        }
    }

    public RelayCommand StartFetching { get; private set; }
    public GetCustomerVM()
    {
        StartFetching = new RelayCommand(OnStart);
    }

    private void OnStart()
    {
        Messenger.Default.Send(new Start());
        AccountDetails a = AccountRepository.GetAccountDetailsByID(CustomerId);
        Messenger.Default.Send(new Complete());
    }
}

ユーザー コントロール ビュー モデルは次のとおりです。

    private bool _IsBusy;
    public bool IsBusy
    {
        get { return _IsBusy; }
        set
        {
            if (value != _IsBusy)
            {
                _IsBusy = value;
                RaisePropertyChanged("IsBusy");
            }
        }
    }
    public WRunEngineVM()
    {
        RegisterForMessages();
    }

    private void RegisterForMessages()
    {
        Messenger.Default.Register<Start>(this, OnStart);
        Messenger.Default.Register<Complete>(this, OnComplete);
    }

    private void OnComplete(Complete obj)
    {
        IsBusy = false;
    }

    private void OnStart(Start obj)
    {
        IsBusy = true;
    }

メイン ウィンドウ ビューでは、ルート要素は

<telerik:RadBusyIndicator IsBusy="{Binding IsBusy}" telerik:StyleManager.Theme="Windows7">
4

1 に答える 1

5

何をしAccountDetails a = AccountRepository.GetAccountDetailsByID(CustomerId);ますか?私の推測では、そこで起こっていることはすべてUIスレッドで実行されています。すべてUIスレッドで発生しているため、UIが更新されて表示される可能性はありませんRadBusyIndicator。メッセージの送信を含め、OnStartすべての作業をに移してみてください。BackgroundWorkerメッセージはバックグラウンドスレッドからUIスレッドを更新するため、ここで問題が発生します。そのため、またはDispatcherに設定IsBusyするにはを使用する必要があります。truefalse

于 2011-12-14T18:33:24.857 に答える