0

UI のさまざまな場所からアクセスできる単一の RoutedUICommand があります。グローバルキーボードショートカット、メニュー、ContextMenu、またはボタンなど。RoutedUICommand.CanExecute および RoutedUICommand.Execute メソッドで実行されるコードは、使用された UI 要素によって異なります。この差別化をどのように達成できますか。(Can)ExecutedRoutedEventArgs.Source または OrigianlSource を使用できると考えていましたが、ソースは常に同じです。これは、ルートのメイン ウィンドウです。これは通常どのように達成されますか?私は何が間違っているのでしょうか?

4

2 に答える 2

1

コマンドを呼び出した UI に応じて異なるコードを実行する必要がある場合は、おそらく何か問題があります。

キーストロークから何かを実行したり、メニューから詳細情報を求めるダイアログを開く場合は、これを 2 つのコマンド (MS Office の「印刷」コマンドと「クイック印刷」コマンドなど) に分割する必要があります。

本当に各 UI 要素から異なることをしなければならない場合は、コマンドを使用しても何の利点も得られず、昔ながらのイベント ハンドラーの使用を検討する必要があります。少なくとも、要素固有のコードは要素に関連付けられており、中央のすべての場所に保存されていません。 「実行」コードを含む。

上記の私のアドバイスを無視することを選択した場合は、CommandParameter プロパティを見てください。各 UI 要素のパラメーターとは異なる値を設定できます。少なくともそれを使用すると、UI/Logic 分離コマンドが設計されているという錯覚を保つことができます。提供します。

于 2009-02-11T10:31:53.230 に答える
0

通常、「ターゲット」ごとに異なる CommandBinding 実装を使用できます。「ソース」ごとに異なる動作をするのは珍しいことです。

あなたがやろうとしていることの例を挙げていただけますか?

于 2009-02-11T09:59:23.197 に答える