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, TextBox
kendisini parametre olarak parametresine geçirdiğiniz anlamına gelir Command
.
Bu, Command
böyle görünmenize yol açar ( DelegateCommand
VM'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 Command
uygulama, TextBox
arka planda kod içermeyen herhangi bir kod için kullanılabilir, ancak bunu kendi sınıfına koymak isteyebilirsiniz, böylece System.Windows.Controls
sanal makinenizde hiçbir bağımlılık kalmaz. Kod kurallarınızın ne kadar katı olduğuna bağlıdır.