Команда для текстового поля WPF, которая запускается при нажатии клавиши Enter
это очень легко связать Button
s в приложениях 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>