2021年9月30日木曜日

WPFのRoutedEventへコマンドをバインディングできる添付プロパティとマークアップ拡張をつくってみた

つい最近WPFのマークアップ拡張について話をする機会があったのですが、
自分はコンバーターは使っていてもマークアップ拡張を実装したことはありませんでした。
せっかくならちゃんとしたサンプルを用意したいと思い、
今困っていたことをそのまま解決するサンプルをつくってみることにしました。

困っていたことはRoutedEventにコマンドをバインディングする方法についてです。
Blend SDKを使えばできることは知っているのですが、
開発中のプロジェクトがタイミング的に参照を追加したくなかったのです。
それにBlend SDKの方法は結構行数を使うので、
スマートにバインディングできるのであれば今後も使い続けられるかもしれません。
ということでつくってみたのが以下のソースコードです。

やっていることはCommandService.RoutedEventBindingという添付プロパティを用意し、
RoutedEventBindingというマークアップ拡張を設定できるようにしました。
RoutedEventBindingにはRoutedEventとコマンドを設定できるので、
だいたい1行で実装することができます。
(テストはしてませんが)たぶんRoutedCommandにも対応しています。

ほぼ車輪の再発明なのでこれを使おうとする方は少ないと思いますが、
何かの参考にはなるんじゃないでしょうか。

0 件のコメント:

コメントを投稿