MVVMメモ4 任意のUIイベントをBindingで処理する

WPFやSilverlightのコントロールでは、
ボタンのクリック等のコントロールを代表する様なイベントには
対応するCommandメンバが用意されておりバインディングにより処理することが可能になっています。

しかし、他のイベントにはCommandなどは用意されていませんし、
WinFormsでは代表するイベントなどにすらCommandもActionも用意されていません。

そこで任意のイベントとActionとのバインディングで処理する方法を考えてみました。

1. Formクラス、Windowクラスなどの派生クラスのメンバ変数として、バインディングで処理したいイベントに対応するActionを用意する。

2. コードビハインド、ラムダ式などでで、イベントが対応するActionを発火するように設定する。
 やる気があるなら、全イベントに対してここまでの処理を行うカスタムコントロールを作ってしまってもいいと思います。

3. ViewModelにバインド先になるActionを作成し、コンストラクタ等でActionに処理を登録する。

4. Bindingを行う。

5. うまく動作しなければ、Actionがprivateになっていないかなどをチェック

WPFもWinFormsもそこまで詳しくないのでもっと楽な方法、美しい方法が他にもあるんじゃないかと思います。
WinFormsで行うことを想定してるので
WPF等では間違っている部分などもあるかもしれませんが、似たようなことは可能だと思うので適当に参考にして下さい。

広告

akatukisiden について

フリーランスプログラマ 使用言語はC++,C#とそのつなぎのC++/CLI 専門はクライアントアプリ開発
カテゴリー: C#, MVVM, Windows Forms タグ: , , , , , , , , , , , パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中