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