如何编写一个方便的MVVM-Keylistener

时间:2015-07-20 07:10:40

标签: wpf mvvm keylistener

我需要在WPF应用程序中编写一个keylistener。我希望能够处理任何密钥。该应用程序符合MVVM模式。

我知道纯XAML解决方案,但它并不是每个密钥的通用:

<KeyBinding Key="Enter" Command="{Binding SearchCommand}" CommandParameter="EnterPressed" />

我不想为每个可能的密钥写这个。有没有办法实现一个不破坏MVVM的方便的KeyListener?

1 个答案:

答案 0 :(得分:0)

我找到了一种简单的方法,可以将按下的键绑定到ViewModel中的变量,而不会破坏MVVM模式。它使用在代码隐藏中创建并填充的Binding:

  1. 在窗口的构造函数中创建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);
    
  2. 在XAML中设置一个Eventhandler:

    KeyDown="KeyDown_Handler"
    
  3. 将按下的键的值分配给DependencyProperty:

    private void KeyDown_Handler(object sender, KeyEventArgs e)
    {
        SetValue(dp, e.Key.ToString());
    }
    
  4. 如果ViewModel中存在公共pressedKey - 变量,则它将包含按下的键。在set-block中或通过调用ViewModel执行命令(((ICommand)DataContext).Execute(...)),您可以立即处理pressedKey