Команда для текстового поля WPF, которая запускается при нажатии клавиши Enter

это очень легко связать Buttons в приложениях 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!");
    }
}

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

4 ответов


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

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

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

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

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

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

можно задать true для свойства AcceptReturn.

 <TextBox AcceptsReturn="True" />