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,以后再详述。

posted @ 2011-12-28 13:39  梦回千秋云断  阅读(2944)  评论(1编辑  收藏  举报