WPF
Xaml
MVVM

[WPF][XAML][MVVM] WPF + MVVM でキーイベントを定義する

More than 1 year has passed since last update.

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