Home > Enterprise >  C# WPF MVVM Textbox Clearing without breaking Command Bindings?
C# WPF MVVM Textbox Clearing without breaking Command Bindings?

Time:09-21

googling for this showed me that this is often a problem but never reallay solved. I do have an App/Prgramm in C#, i'll try to be mvvm conform. I do have an window, in it a UserControl show different views. One of my view contains a textbox, the text of the textbox is bound to a proptery of the VM. My textbox got 2 inputbindings, for "enter" and "return" - both leading to same command.

On hitting "enter" the value of the textbox should be processed, the textbox shoud be cleared and refocused ... This works .... One Time .... Clearing the textbox with String.Empty breaks the Bindings ... this could be found in several postings here ... the most Solution is textboxname.clear() ... But i dont have the "textboxname" in the viewmodel, only in code-behind, but all my logic is in the VM ... So can somebody pls help me sort things out, how i could clear the textbox without breaking the bindings to input text and hit enter more then one time ?

My Code

<TextBox x:Name="tb_checkinbox" Grid.Row="0" Grid.Column="1" Width="200" Height="25" VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding CheckInNumber}">
<TextBox.InputBindings>
                <KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Return"/>
                <KeyBinding Command="{Binding OnCheckInEnterCommand}" Key="Enter"/>
</TextBox.InputBindings>
</TextBox>
public CheckinVM()
        {
            OnCheckInEnterCommand = new RelayCommand(OnCheckInEnter, CanCheckInEnter);
        }

        private string _checkInNumber;

        public string CheckInNumber
        {
            get { return _checkInNumber; }
            set { SetProperty(ref _checkInNumber, value); }
        }

        public ICommand OnCheckInEnterCommand { get; set; }

        public void OnCheckInEnter(object value)
        {
           CheckInNumber = String.Empty;
           /// More to do
                        
        }

        public bool CanCheckInEnter(object value)
        {
            return true;
        }

CodePudding user response:

The assignment

CheckInNumber = string.Empty;

does not "clear" any Binding. Your conclusion is wrong.

You do however only get empty strings - after clearing - in the setter of the CheckInNumber property. In order to get property updates not only when the TextBox loses focus or you reset the source property, set UpdateSourceTrigger=PropertyChanged on the Text Binding:

<TextBox ... Text="{Binding CheckInNumber, UpdateSourceTrigger=PropertyChanged}">
  • Related