C# WPF + MVVM でキー押下処理の実装

毎回忘れる+ググってもすぐに見つからないのでメモとして残します
(ReactiveProperty 使ってます)
注意:
特定のキー押下で処理を行いたい場合は、本内容ではありません。別のやり方(KeyBinding を使う)です。
(例:ESCを押下で画面を閉じる、4押下で左に移動するなど…)


やりたいこと:
・WPF + MVVM で キー押下処理の実装
・どのキーが押されたかで処理を変更する
・要するにKeyDown イベントと同じことがしたい

ポイント:
「PassEventArgsToCommand="True"」これが無いとMVVMでは受信できない。
てかデフォルトtrueにしとけや と思ったり思わなかったり…
デフォルトtrueにするとイベントが発生しないとかなりそうな…
実装:
XAML
<UserControl …
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
…/>

<i:Interaction.Triggers>
    <i:EventTrigger EventName="KeyDown">
        <i:InvokeCommandAction Command="{Binding KeyDownAllCommand}" PassEventArgsToCommand="True"/>
    </i:EventTrigger>
</i:Interaction.Triggers>


ViewModel:
フィールド:
public ReactiveCommand<KeyEventArgs> KeyDownAllCommand { get; private set; }

コンストラクタ:
KeyDownAllCommand = new ReactiveCommand<KeyEventArgs>().WithSubscribe(KeyDown).AddTo(Disposables);

メソッド:
private void KeyDown(KeyEventArgs keyArgs)
{
    _logger.Debug(keyArgs.Key);
}



/**********************************************************************************
本記事はGooブログから作成者本人が移行しました。
 **********************************************************************************/

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ