0

コマンドの処理中にボタンを無効にしたい。

    public ICommand Search { get; set; }

    private void InitilizeSearchCommand()
    {
        Search = new RelayCommand<string>(
            param => DoSearch(param), 
            param => !_isSearchInProgress);
    }

_isSearchInProgressを変更するにはどうすればよいですか?フィールドにアクセスできない場所(RelayCommandオブジェクト)から実行されるため、「Execute」デリゲート内では実行できませんでした(私の理解が正しい場合)。

Search = new RelayCommand<string>(
            param =>
                {
                    _isSearchInProgress = true;
                    DoSearch(param);
                    _isSearchInProgress = false;
                },
            param => !_isSearchInProgress);

助けてくれてありがとう。

4

2 に答える 2

1

問題を解決するための解決策:

Search = new RelayCommand<string>(
            backgroundWorker.RunWorkerAsync,
            param =>
                {
                    CommandManager.InvalidateRequerySuggested();
                    return !_isSearchInProgress;
                });

The

CommandManager.InvalidateRequerySuggested();

Executeではなく、CanExecuteメソッドに追加する必要があります。_isSearchInProgressは、別のスレッド(私の場合はbackgroundWorker.RunWorkerAsync)で実行されるDoSearch()内で更新されます。

于 2012-02-02T12:46:39.203 に答える
0

バックグラウンドスレッドまたはタスクで実行している場合を除き、GUIはCanExecute部分からの更新を要求しません。バックグラウンドで作業を行っている場合は、_isSearchInProgressが関数内ではなく、クラスの一部として作成されていることを確認してください。

于 2012-01-31T17:51:55.723 に答える