9

XAML で s を使用する場合ICommand、WPF はCanExecuteメソッドを使用して、コマンドに関連付けられたコントロールを有効または無効にします。Executeしかし、手続き型コードから呼び出している場合はどうなるでしょうか? 最初CanExecuteにコマンドが実行できることを確認する必要がありますか、それともExecuteこのチェックを自分で処理する必要がありますか?

言い換えれば、これを行う必要があります:

if (someCommand.CanExecute(parameter, target))
    someCommand.Execute(parameter, target);

またはこれだけ:

someCommand.Execute(parameter, target);
4

3 に答える 3

8

良いスタイルでは、前者を実行する必要があります。最初に CanExecute を確認してください。これにより、適切な分解と実装の一貫性が強化されます。また、ボタンにバインドされたこのコマンドを使用したい場合でも、期待どおりに機能します。

于 2011-08-04T14:20:55.060 に答える
5

Execute を呼び出すだけで、コマンドの実装に検証を処理させることができます。CanExecute は、主に UI 状態バインディング用に提供されています。

非常に単純なシングル スレッドのシナリオを除いて、最初に CanExecute を呼び出したとしても、CanExecute 呼び出しと Execute 呼び出しの間でコマンドの有効性が変化し、CanExecute の呼び出しが無意味になる競合状態が簡単に発生する可能性があります。

于 2011-08-04T14:24:11.290 に答える
2

最初に CanExecute を呼び出す必要があります。ICommand を実装するクラスが Execute メソッドで CanExecute をチェックするということは何もありません。

于 2011-08-04T14:24:29.587 に答える