MVVMLight的鍵盤事件綁定Command

來源:互聯網
上載者:User

     以前都是控制項綁定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,以後再詳述。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.