Я использую следующую реализацию при использовании шаблона команды:
private void MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
BindingExpression b = MyTextBox.GetBindingExpression(TextBox.TextProperty);
if (b != null)
b.UpdateSource();
ICommand cmd = SomeButton.Command;
if (cmd.CanExecute(null))
cmd.Execute(null);
}
}
Когда вы нажимаете Enter, источник данных текстового поля не обновляется, и команда использует старое значение. Поэтому вы должны вызвать UpdateSource перед выполнением команды.
Конечно, вы можете поймать событие на более высоком уровне, чем текстовое поле.