zoukankan      html  css  js  c++  java
  • MVVMLight的键盘事件绑定Command

         以前都是控件绑定Command,MvvmLight进行绑定很简单,使用Blend几步操作就好,但是这短时间的项目需要绑定键盘事件。结果发现MvvmLight绑定按键很麻烦。看到有篇文章说Silverlight可以使用KeyTrigger进行Command绑定,但是实际测试的时候在WPF中KeyTrigger中定义InvokeCommandAction,其中CommandName属性不支持绑定,而且不支持Command属性。项目已经基本完工,临时改架构肯定不可能,OK,我们只能借用CodeBehind来调用ViewModel的Command。当然这样子是比较丑陋的写法。当然可以重写EventToCommand来进行按键的Command绑定。这样子比较优雅的写法,这是后话。

         OK,我们先看用CodeBehind的Shit代码……

    在ViewModel中有这样的Command代码:

       1: public ICommand StartLotteryCommand { get; private set; }        //定义Command
       2:  
       3: public MainViewModel()
       4:        {
       5:           
       6:            StartLotteryCommand = new RelayCommand(
       7:                ()=>{
       8:                    //加入自己的代码逻辑
       9:                }
      10:                );
      11:         }

        我们在界面的CodeBehind代码中加入按键事件。首先给Window添加

    KeyUp事件。在Xaml中添加 KeyUp="Window_KeyUp" 即可。

    然后在*.Xaml.cs中的事件中进行Command调用。

       1: private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
       2: {
       3:     switch (e.Key)
       4:     {
       5:         case Key.S:              
       6:             ((MainViewModel)this.DataContext).StartLotteryCommand.Execute(null);
       7:             break;
       8:         default:
       9:             break;
      10:     }
      11: }

       我们知道,Command都有两个事件,CanExecute和Execute,执行Execute事件即调用该Command。OK,现在键盘事件已经和Command绑定。

    当然,如果想获得如同控件绑定Command那样优雅的写法,就需要重写EventToCommand,以后再详述。

    分享到: 更多
  • 相关阅读:
    hdu1410 数学题组合概率 log优化
    Triangle
    Unique Paths II
    Unique Paths
    Pascal's Triangle II
    Pascal's Triangle
    Plus One
    Remove Duplicates from Sorted Array II
    Remove Duplicates from Sorted Array
    Remove Element
  • 原文地址:https://www.cnblogs.com/haisa/p/2304690.html
Copyright © 2011-2022 走看看