アプリケーションのメニューにCanExecuteパラメーターを使用する際にジレンマに直面しています。CommandBinding
状況は次のとおりです。アプリケーション自体は、作業モード、レビュー モードなどの特定のモードで実行できます。モードに応じて、一部のメニュー項目を有効または無効にする必要があります (したがって、実行可能または不可能)。
これまでに行ったことは、CanExecute の 4 つのイベント ハンドラーを作成することです。
private void Mode1CanExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode1CannotExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode2CanExecute(object sender, CanExecuteRoutedEventArgs e);
private void Mode2CannotExecute(object sender, CanExecuteRoutedEventArgs e);
一部のメニュー コマンドは両方のモードに共通であるため、一部は各モード専用です。
アプリケーションが開発されるにつれて、特定のメニュー コマンドをその時点で実行する必要があるかどうかを決定する要因が増えます。私が考えることができる解決策は次のとおりです。
- イベントハンドラーにブールマルチバインディングを追加しました
CanExecuteが、このソリューションの例が見つかりませんでした.不可能だと思います. - さらに長い名前のイベントハンドラーを追加する
CanExecuteと、実際にはコードが読みにくくなります - 「メニュー項目ごと」
CanExecuteのイベントハンドラーを持ち、各イベントハンドラーのコードをいくつかのブール変数に基づいて、その結果を決定します
メニュー項目の有効化はイベント ハンドラーで実行できることは知っていますSubmenuOpenedが、多くのコマンドには もKeyGesture定義されています。
私の質問は次のとおりです。この場合のベスト プラクティスは何でしょうか。アプリケーションのロジック (コマンド実行の可用性) が保証され、コードの読みやすさも妥当なレベルに保たれますか?
ご提案ありがとうございます。