Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# WPF editable Combobox how to detect Enter key

Tags:

c#

wpf

xaml

I use C# and WPF and MVVM

I have an editable Combobox so that a user can not only select items from the list but also type own text in the comboxbox' textfield

XAML:

<br>
<ComboBox IsEditable="True"<br>
          IsTextSearchEnabled="True" <br>
          IsTextSearchCaseSensitive="False"<br>
          StaysOpenOnEdit="True"<br>
          Text="{Binding TextEntered}"<br>
</ComboBox>
<br>

In the bound property "TextEntered" I can see in the Debugger the text that the user has typed - however this does not work if the user presses ENTER to finished his input. So how could I react when the users presses Enter ?

thank you

like image 786
Spacewalker Avatar asked Dec 01 '25 11:12

Spacewalker


1 Answers

If you don't want to react on PropertyChanged, you can set the UpdateSourceTrigger to Explicit

<ComboBox IsEditable="True"
        IsTextSearchEnabled="True"
        IsTextSearchCaseSensitive="False"
        StaysOpenOnEdit="True"
        Text="{Binding TextEntered, UpdateSourceTrigger=Explicit}">
        <ComboBox.InputBindings>
            <KeyBinding Gesture="Enter"
                        Command="{Binding UpdateBindingOnEnterCommand}"
                        CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type ComboBox}}}"></KeyBinding>
        </ComboBox.InputBindings>

And call UpdateSource of the binding in the execute of your command

public class UpdateBindingOnEnterCommand : ICommand
{
...
    public void Execute(object parameter)
    {
        if (parameter is ComboBox control)
        {
            var prop = ComboBox.TextProperty;
            var binding = BindingOperations.GetBindingExpression(control, prop);
            binding?.UpdateSource();
        }
    }
...
}
like image 52
less Avatar answered Dec 04 '25 00:12

less



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!