系列目錄:
MVVM模式解析和在WPF中的實作(一)MVVM模式簡介
MVVM模式解析和在WPF中的實作(二)資料綁定
MVVM模式解析和在WPF中的實作(三)指令綁定
MVVM模式解析和在WPF中的實作(四)事件綁定
MVVM模式解析和在WPF中的實作(五)View和ViewModel的通信
MVVM模式解析和在WPF中的實作(六)用依賴注入的方式配置ViewModel并注冊消息
指令綁定要關注的核心就是兩個方面的問題,指令能否執行和指令怎麼執行。也就是說當View中的一個Button綁定了ViewModel中一個指令後,什麼時候這個Button是可用的,按下Button後執行什麼操作。解決了這兩個問題基本就實作了指令綁定。另外一個問題就是執行過程中需要的資料(參數)要如何傳遞。本次主要探讨這幾個問題。
自定義一個能夠被綁定的指令需要實作ICommand接口。該接口包含:
那麼要如何實作這個接口呢?那得先搞明白這個接口是幹什麼用的。MSDN上是這麼說的:
https://msdn.microsoft.com/zh-cn/library/system.windows.input.icommand(v=vs.110).aspx
我總結了一下大概是這樣的

CanExecute和Execute方法是接口給出的,我們要做的就是建立一個類MyCommand來實作這兩個方法執行的内容。可以通過在MyCommand的構造函數中傳入Action<object>和Func<object,bool>,讓CanExecute執行Func<object,bool>,Execute執行Action<object>。實作後MyCommand結構如下圖所示,其中淺綠色背景的為ICommand接口的實作,淺藍色背景的為MyCommand的成員。
指令綁定時經常需要傳參數,這種情況下可以給MyCommand添加泛型支援
有了MyCommand類,我們就可以在ViewModel中建立一個MyCommand對象,然後在View中綁定了。示例如下:
示例代碼: https://github.com/durow/TestArea/tree/master/MVVMTest/CommandTest
更多内容歡迎通路我的部落格:http://www.durow.vip