blogWPFのCommandWPFのCommandとCommandBindingについてどうにも理解に苦しんだので記述。CommandSourceCommandとCommandSourceは下記のような関係にある。ICommmandSourceを実装しているボタンやメニューには、CommandプロパティがあるCommandオブジェクトには、CanExecuteとExecuteメソッドがある。ボタンやメニューのCommandプロパティに代入すると、以下の動作をするようになる。CanExecuteがfalseのときDisableになる。クリックするとExecuteを呼び出す。セットするということをやれば、NewCommandのCanExecuteを変更するだけでボタンとメニューの両方のEnable/Disableを変更できるし、ボタンとメニューのどちらをクリックしても同じExecuteが呼び出されることになる。......と、ここまでは理解しやすい。CommandBindingじゃーCommandBindingはなんなのだろう?上記のICommandSource/Commandでひととおり完結しているんで何の役に立つんだ?ってことで悩んだ。内部処理を解析したわけではないけど、ドキュメントを見る限りだと、こーいう風につながっている。</StackPanel></Window>CommandSourceがコマンドを実行すると下記のように処理が走る、っぽい。・RoutedCommandのExecuteで、CommandManagerに問い合わせる・CommandManagerはCommandTarget(デフォルトはフォーカスのあるコントロール)のCommandBindingsをチェック。・その後、UIツリーを順に親に向かってたどりながら上記のCommandBindingイベントを発生させていく。......てな動きをする。・CommandManagerによる検索パスによって、CommandTargetからたどった親要素でしかイベントが発生しないということになるので、たとえばMDI子ウインドウのボタンで実行したReloadCommandが別のウインドウに影響を与えることはない。よってstaticに1つだけあるだけでよい。同じコマンドの発行が状況(フォーカスコントロール)によって対象が変わるCommandBindingをリーフレベルのコントロールにつけておくと、Commandを単に実行するだけでフォーカス位置に応じて適切なコントロールが操作される......ってとこか?MVVMとMVVMパターンで、ダイアログ(新しいWindowオブジェクト)を作成して表示する類のコマンドってどうするのかなー?と思ってた。・WindowのCommandBindingでバインド・Executedイベントで別Windowを作成して表示とかで実装するのがよいのかもしれん。でかい画像が見切れる。FC2はあんまりプログラミングのネタにむかないんかな。URLhttp://antsk.blog99.fc2.com/tb.php/3-11f32aafこの記事にトラックバックする(FC2ブログユーザー)WPFのRoutedCommandとCommandBindingふつーに、WPFなアプリを作ってて、行き詰まりというか、悩んでたことが、解決した。解決した内容とかは、他のWebサイトとかにも載ってる内容なのでそっちを参考にするっとφ(。気が向いたら概要を図にまとめてもいいかな、と思う。|すふぃあの記憶プロフィールAuthor:antsk主にC#のプログラマ。