Команда для WPF TextBox, которая срабатывает, когда мы нажимаем Enter Key

Очень легко привязать Button в приложениях WPF к Command в классе VIEWMODEL. Я хотел бы получить аналогичную привязку для 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!");
    }
}

Есть ли лучший способ сделать это?

Ответ 1

Aryan, не каждый объект WPF поддерживает команду. Поэтому, если вы этого не сделаете, вам понадобится либо вызвать вашу модель взгляда из вашего кода (немного связанного), либо использовать некоторую реализацию MVVM Messaging, чтобы отделить ее. См. MVVM Light Messaging toolkit для примера. Или просто использовать триггеры вроде этого:

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

Ответ 2

Я столкнулся с той же проблемой и нашел решение здесь, вот пример кода:

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

Ответ 3

Мне нравится ответ Sarh, но он не будет работать в моей программе, если я не изменил Enter на Return:

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

Ответ 4

Вы можете установить true для свойства AcceptReturn.

 <TextBox AcceptsReturn="True" />