Я пытаюсь зафиксировать нажатие клавиши Enter в текстовом поле, чтобы запустить обновление на сервере. Это не работает, поэтому я свел проблему к упрощенным элементам.
В этом примере кажется, что привязка происходит не по нажатию клавиши, а через какое-то время. Мне нужно, чтобы привязка была завершена к моменту нажатия клавиши ввода. Рассмотрим следующий XAML и функцию из виртуальной машины.
Вот XAML текстового поля
<TextBox Text="{Binding TextValue, Mode=TwoWay}" Height="23" Width="300">
<i:Interaction.Triggers>
<i:EventTrigger EventName="KeyDown">
<cmd:EventToCommand Command="{Binding KeyDownCommand}"
PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
KeyDownCommand срабатывает, как и ожидалось, однако значение еще не находится в свойстве TextValue. Если я нажму Enter во второй раз, значение будет в свойстве? Вот команда KeyDown. Конструктор ViewModel правильно устанавливает keyDownCommand.
public RelayCommand<RoutedEventArgs> KeyDownCommand { get; private set; }
private void KeyDownAction(RoutedEventArgs eventArg)
{
var source = eventArg.OriginalSource as FrameworkElement;
var e = eventArg as KeyEventArgs;
if (source != null && e != null && e.Key== Key.Enter)
{
e.Handled = true;
MessageBox.Show(TextValue);
}
}
Кажется, мне нужен способ «отправить» текст TextBox обратно в свойство TextValue виртуальной машины при нажатии клавиши Enter. Или есть что-то еще, что мне не хватает.