web-dev-qa-db-ja.com

Enterキーを押すと起動するWPF TextBoxのコマンド

WPFアプリのButtonsをCommandクラスのVIEWMODELsにバインドするのは非常に簡単です。 TextBoxに対して同様のバインディングを実現したいと思います。

TextBoxがあり、ヒットしたときに起動するCommandにバインドする必要があります Enter TextBoxがフォーカスされている間。現在、私はKeyUpイベントに次のハンドラーを使用していますが、見苦しい...そしてVIEWMODELクラスに入れることはできません。

private void TextBox_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == System.Windows.Input.Key.Enter)
    {
        // your event handler here
        e.Handled = true;
        MessageBox.Show("Enter Key is pressed!");
    }
}

これを行うためのより良い方法はありますか?

69

Aryan、すべてのWPFオブジェクトがコマンドをサポートしているわけではありません。そのため、それを行いたくない場合は、ビハインドコードからビューモデルを呼び出すか(少し結合)、MVVMメッセージング実装を使用して分離する必要があります。例については、 MVVM Light Messagingツールキット を参照してください。または、次のような単純な使用トリガー:

<TextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyUp">
            <i:InvokeDataCommand Command="{Binding MyCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>
19
Erre Efe

私は同じ問題に直面し、解決策を見つけました here 、ここにコードサンプルがあります:

<TextBox>
  <TextBox.InputBindings>
    <KeyBinding Command="{Binding Path=CmdSomething}" Key="Enter" />
  </TextBox.InputBindings>
</TextBox>
221
sarh

Sarhの答えは好きですが、EnterReturnに変更しない限り、私のプログラムでは機能しません。

<TextBox>
    <TextBox.InputBindings>
        <KeyBinding Key="Return" Command="{}" />
   </TextBox.InputBindings>
</TextBox>
11
Nightmare Games