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?
views:
469answers:
2
A:
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}" />
Richard Szalay
2009-10-19 08:59:01
+4
A:
You can use the IsDefault property of the button:
<Button Command="SearchCommand" IsDefault="{Binding ElementName=SearchTextBox,
Path=IsKeyboardFocused}">
Search!
</Button>
Dabblernl
2009-10-19 09:07:01
Thanks, easy and clean. Works great!
code-zoop
2009-10-19 09:47:13
Thank you for this!
eibhrum
2010-04-21 01:19:50