WPF + MVVM でキーイベントを扱う方法のメモ
もちろん旧来通りKeyDownのイベントハンドラを利用してもいいんでしょうけど、MVVM的な実装をしたいので調べたら簡単な方法がありました。
実装例
Ctrl + S でViewModelの特定の内容を保存するコマンドを呼び出したい場合。
実装例1(Gestureを利用)
<Grid>
<Grid.InputBindings>
<KeyBinding Gesture="Ctrl+S" Command="{Binding SaveFileCommand}"/>
</Grid.InputBindings>
</Grid>
実装例2(KeyとModifiersを利用)
<Grid>
<Grid.InputBindings>
<KeyBinding Key="S" Modifiers="Control" Command="{Binding SaveFileCommand}"/>
</Grid.InputBindings>
</Grid>
上記の方法はどちらでも良いですが、複数キーの組み合わせの場合は1つ目の Gesture
のほうが簡単そうです。
Gesture
の場合の利点としては Ctrl+Alt+S
などの2つ以上でもそのまま書けるところです。
KeyBindingの定義は以下になります。
KeyBinding クラス (System.Windows.Input)
Gesture指定可能キー
Modifiers
対応キー | 指定値 |
---|---|
Alt キー | Alt |
Control キー | Control / Ctrl |
Shift キー | Shift |
Windows キー | Windows |
Key
※よくつかうだろうもの抜粋。わからなければKeyの補完から探すと良い
対応キー | 指定値 |
---|---|
↑ キー | Up |
↓ キー | Down |
関連
InputBindingsでは同様にマウスイベントも取り扱えます。
MouseBinding クラス (System.Windows.Input)
参考
Keyboard events in a WPF MVVM application? - Stack Overflow
連載:WPF入門:第6回 「コマンド」と「MVVMパターン」を理解する (2/3) - @IT