Hem Ben hem de ausadmin çözümlerini birleştirirseniz, MVVM dostu bir çözüm elde edersiniz:
<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>
... bu, TextBoxkendisini parametre olarak parametresine geçirdiğiniz anlamına gelir Command.
Bu, Commandböyle görünmenize yol açar ( DelegateCommandVM'nizde bir -style uygulaması kullanıyorsanız ):
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();
}
}
Bu Commanduygulama, TextBoxarka planda kod içermeyen herhangi bir kod için kullanılabilir, ancak bunu kendi sınıfına koymak isteyebilirsiniz, böylece System.Windows.Controlssanal makinenizde hiçbir bağımlılık kalmaz. Kod kurallarınızın ne kadar katı olduğuna bağlıdır.