WPF: Execute a Command Binding in a search field when pressing the enter button
11,201
Solution 1
You can use the IsDefault property of the button:
<Button Command="SearchCommand" IsDefault="{Binding ElementName=SearchTextBox,
Path=IsKeyboardFocused}">
Search!
</Button>
Solution 2
The accepted answer only works if you already have a button bound to the command.
To avoid this limitation, use TextBox.InputBindings:
<TextBox.InputBindings>
<KeyBinding Key="Enter" Command="{Binding Path=MyCommand}"></KeyBinding>
</TextBox.InputBindings>
Solution 3
The Prism Reference Implementation contains an implementation of exactly what you are after.
The basics steps are:
- Create a static class EnterKey
- Registered attached property "Command" of type ICommand on EnterKey
- Registered attached property "EnterKeyCommandBehavior" of type EnterKeyCommandBehavior on EnterKey
- When the value of "Command" changes, attach "EnterKeyCommandBehavior" to the control as a new instance of EnterKeyCommandBehavior, and assign the ICommand to the behavior's Command property.
- If the behavior is already attached, use the existing instance
- EnterKeyCommandBehavior accepts a UIElement in the constructor and attaches to the PreviewKeyDown (or KeyDown if you want to stay Silverlight compatible).
- In the event handler, if the key is Enter, execute the ICommand (if CanExecute is true).
This enables you to use the behavior like so:
<TextBox prefix:EnterKey.Command="{Binding Path=SearchCommand}" />
Solution 4
<TextBox Text="{Binding SerachString, UpdateSourceTrigger=PropertyChanged}">
<TextBox.InputBindings>
<KeyBinding Command="{Binding SearchCommand}" Key="Enter" />
</TextBox.InputBindings>
</TextBox>
this should work fine.100%
Author by
code-zoop
Updated on June 25, 2022Comments
-
code-zoop about 2 years
I have a search field in my WPF app with a search button that contains a command binding. This works great, but how can i use the same command binding for the text field when pressing enter on the keyboard? The examples I have seen are all using the Code behind with a KeyDown Event Handler. Is there a smart way to make this work only with xaml and command binding?
-
code-zoop over 14 yearsThanks, easy and clean. Works great!
-
Scott over 11 yearsI additionally had to change the UpdateSourceTrigger on my TextBox.Text binding to get this to work. For more details, check out Capturing the Enter key in a TextBox.
-
ihake over 10 yearsWhat if you don't have a button?
-
Brandon over 9 yearsThis works the first time I press enter. I continue editing the search and press enter and it doesn't perform the search. I have to manually click back on the search control to get it to perform another search when I press enter.
-
Brandon over 9 yearsNevermind--I'm an idiot. I forgot to add UpdateSourceTrigger=PropertyChanged on the TextBox :D
-
kenjara over 6 yearsThis should be the accepted answer. It works great is clean where as the accepted answer is a bit of a hack.