2010-12-01 7 views
4

プロジェクトにMVVMパターンを適用します。私はViewModelによって公開されたコマンドにバインドされたボタンを持つUserControlを持っています。 ボタンが表示されているので、ボタンのCanExecuteメソッドを継続的に呼び出しています。何かは、これはパフォーマンスのペナルティを運ぶと私に言うが、私はよくわからない。これは期待される行動ですか?またはボタンをコマンドにバインドするより良い方法がありますか?コマンドで連続CanExecute呼び出しのパフォーマンスペナルティ

ありがとうございます。

+0

なぜ、CanExecuteを呼び出すボタンが連続しているのですか?これはデフォルトでは行われません。また、 'ICommand.CanExecuteChanged'が呼び出されたときにのみ行うべきです。 – Jens

+0

どのようなタイプのICommandを使用していますか?異なる実装は、CanExecuteの更新に関して多くの点で異なった動作をする可能性があります。 –

+0

私は通常のICommandインターフェイスを使用しています。実際はRelayCommandクラスです。これは、デリゲート注入を使用してメソッドを指定することを除いて、何も特別なものではありません。 –

答えて

1

申し訳ありませんが、私は何が起こっていたのか分かりました。 これはRelayCommandの実装です。

システムがすべてのコマンドを自動的に再クエリーしていると誤って想定していました。実際には、各コマンドのCanExecuteChangedイベントへのフックがあり、RelayCommandは基本的にCanExecuteChangedイベントをCommandManagerのRequerySuggestedイベントにリンクするので、システムが再クエリーを提案するたびに、すべてのRelayCommandsを再クエリーしていました。

ありがとうございます。

+0

解決策はどこですか? – qakmak

+0

何に? RequerySuggestedイベントでコマンドを再クエリしたくない場合は、RelayCommandを使用しないでください。 –

+0

パフォーマンスの問題を修正しました。私はあなたがそれを修正しようとしていると思った...... – qakmak

関連する問題