Если вы объедините решения Ben и ausadmin, вы получите очень дружественное к MVVM решение:
<TextBox Text="{Binding Txt1, Mode=TwoWay, UpdateSourceTrigger=Explicit}">
<TextBox.InputBindings>
<KeyBinding Gesture="Enter"
Command="{Binding UpdateTextBoxBindingOnEnterCommand}"
CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type TextBox}}}" />
</TextBox.InputBindings>
</TextBox>
... что означает, что вы передаете TextBox
саму себя как параметр в Command
.
Это приводит к тому, что вы Command
выглядите так (если вы используете DelegateCommand
реализацию в стиле в своей виртуальной машине):
public bool CanExecuteUpdateTextBoxBindingOnEnterCommand(object parameter)
{
return true;
}
public void ExecuteUpdateTextBoxBindingOnEnterCommand(object parameter)
{
TextBox tBox = parameter as TextBox;
if (tBox != null)
{
DependencyProperty prop = TextBox.TextProperty;
BindingExpression binding = BindingOperations.GetBindingExpression(tBox, prop);
if (binding != null)
binding.UpdateSource();
}
}
Эта Command
реализация может использоваться для любого TextBox
кода, а лучше всего - без кода в коде программной части, хотя вы можете поместить его в собственный класс, чтобы System.Windows.Controls
в вашей виртуальной машине не было зависимостей . Это зависит от того, насколько строгие правила вашего кода.