WPFを使う-イベント対応

Viewで発生した各種イベントをViewModelで処理する方法について。

初めに

調べるきっかけになったのは、ウィンドウの閉じるボタンを押したときの動作。閉じた時、アプリケーションが何らかの動作をしていたら、ダイアログを出すなどの追加処理をしたかったため。

View側でやった場合、Modelの状況が分からないので、ViewModelで対処をしたかった。

一応、Prismを使うことで可能になったのだが、ViewModel側でSystem.ComponentModelのイベント処理を行うことへの抵抗感が肝かな。

実装方法

ViewModel側でのコマンド


// 定義
public DelegateCommand<CancelEventArgs> closeAction { get; private set; }

// 生成
closeAction = new DelegateCommand<CancelEventArgs>(x => closeEvent(x));

// イベント処理
private void closeEvent(CancelEventArgs e) {
	実際の閉じるときの処理
}

xaml側の記述

名前の定義
 xmlns:prism="http://prismlibrary.com/"
 xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
イベントへの割り付け
<i:EventTrigger EventName="Closing">
<prism:InvokeCommandAction Command="{Binding closeAction}"/>
</i:EventTrigger>

コマンドのバインドはprism側のInvokeCommandActionを使用する。

最後に

これを使うことで、ほかにも、Drag&Dropなどのイベントにも、ViewModel側で対応できるので、利用の範囲が広がっていく。

コメント

タイトルとURLをコピーしました