Search code examples
c#wpfxamlmvvmcommandparameter

How can I pass the currently focused element name through a CommandParameter in XAML?


In my WPF MVVM application I want to be able to undo changes to individual TextBox elements using the Esc key. I've set up a command for this and I want to trigger it through XAML thus:

<Window.InputBindings>
    <KeyBinding Command="{Binding EscKeyCommand}" CommandParameter="{Binding FocusManager.FocusedElement}"  Gesture="ESC" />
</Window.InputBindings>

The idea is that the CommandParameter passes the ElementName of the currently focussed TextBox (if indeed that's what's in focus) and the appropriate undo can then be handled within the ViewModel. I've tried a number of options for the CommandParameter including the one above but they all return null. So,

Question

How can I pass the currently focused element name through a CommandParameter?


Solution

  • I am glad that you have already noticed KeyBoard.FocusedElment. But there still an answer for the question. Since FocusManager.FocusedElement is an attached property, the right way to bind it should be:

    CommandParameter="{Binding (FocusManager.FocusedElement), ElementName='name of the window'}"