यदि आप बेन और औसादमिन दोनों के समाधानों को जोड़ते हैं, तो आप एक बहुत 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
आपके वीएम पर कोई निर्भरता नहीं है । यह इस बात पर निर्भर करता है कि आपके कोड दिशानिर्देश कितने सख्त हैं।