Команда для WPF TextBox, которая запускается при нажатии клавиши Enter - PullRequest
69 голосов
/ 30 июля 2011

Очень просто привязать Button s в приложениях WPF к Command s в классе 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 ]

220 голосов
/ 06 мая 2012

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

<TextBox>
  <TextBox.InputBindings>
    <KeyBinding Command="{Binding Path=CmdSomething}" Key="Enter" />
  </TextBox.InputBindings>
</TextBox>
19 голосов
/ 30 июля 2011

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

<TextBox>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="KeyUp">
            <i:InvokeDataCommand Command="{Binding MyCommand}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</TextBox>
11 голосов
/ 30 августа 2014

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

<TextBox>
    <TextBox.InputBindings>
        <KeyBinding Key="Return" Command="{}" />
   </TextBox.InputBindings>
</TextBox>
0 голосов
/ 02 января 2015

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

 <TextBox AcceptsReturn="True" />
...