我需要在WPF应用程序中编写一个keylistener。我希望能够处理任何密钥。该应用程序符合MVVM模式。
我知道纯XAML解决方案,但它并不是每个密钥的通用:
<KeyBinding Key="Enter" Command="{Binding SearchCommand}" CommandParameter="EnterPressed" />
我不想为每个可能的密钥写这个。有没有办法实现一个不破坏MVVM的方便的KeyListener?
答案 0 :(得分:0)
我找到了一种简单的方法,可以将按下的键绑定到ViewModel中的变量,而不会破坏MVVM模式。它使用在代码隐藏中创建并填充的Binding:
在窗口的构造函数中创建DependencyProperty和Binding:
Binding binding = new Binding();
binding.Path = new PropertyPath("pressedKey");
binding.Source = DataContext;
binding.Mode = BindingMode.OneWayToSource;
dp = DependencyProperty.Register("pressedKey", typeof(string), typeof(MainWindow));
BindingOperations.SetBinding(this, dp, binding);
在XAML中设置一个Eventhandler:
KeyDown="KeyDown_Handler"
将按下的键的值分配给DependencyProperty:
private void KeyDown_Handler(object sender, KeyEventArgs e)
{
SetValue(dp, e.Key.ToString());
}
如果ViewModel中存在公共pressedKey
- 变量,则它将包含按下的键。在set-block中或通过调用ViewModel执行命令(((ICommand)DataContext).Execute(...)
),您可以立即处理pressedKey