いつもどこかでデスマーチ♪

不定期に、私の日常を書き込みしていきます。

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

2023年09月01日 10時27分56秒 | .NET系
毎回忘れる+ググってもすぐに見つからないのでメモとして残します
(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>


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

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

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


コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Eclipse さん!勝手にエディ... | トップ | WPF で 他プロジェクトのDLL... »

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

.NET系」カテゴリの最新記事