MVVM模式解析和在WPF中的實現(三)命令繫結

durow發表於2015-10-07

MVVM模式解析和在WPF中的實現(三)

命令繫結

系列目錄:

MVVM模式解析和在WPF中的實現(一)MVVM模式簡介

MVVM模式解析和在WPF中的實現(二)資料繫結

MVVM模式解析和在WPF中的實現(三)命令繫結

MVVM模式解析和在WPF中的實現(四)事件繫結

MVVM模式解析和在WPF中的實現(五)View和ViewModel的通訊 

MVVM模式解析和在WPF中的實現(六)用依賴注入的方式配置ViewModel並註冊訊息

0x00 命令繫結要達到的效果

命令繫結要關注的核心就是兩個方面的問題,命令能否執行和命令怎麼執行。也就是說當View中的一個Button繫結了ViewModel中一個命令後,什麼時候這個Button是可用的,按下Button後執行什麼操作。解決了這兩個問題基本就實現了命令繫結。另外一個問題就是執行過程中需要的資料(引數)要如何傳遞。本次主要探討這幾個問題。

0x01 命令繫結的實現

自定義一個能夠被繫結的命令需要實現ICommand介面。該介面包含:

public event EventHandler CanExecuteChanged // 在命令可執行狀態發生改變時觸發

public bool CanExecute(object parameter) //檢查命令是否可用的方法

public void Execute(object parameter)  //命令執行的方法

那麼要如何實現這個介面呢?那得先搞明白這個介面是幹什麼用的。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的成員。

 

0x02 新增泛型支援的命令MyCommand<T>

命令繫結時經常需要傳引數,這種情況下可以給MyCommand新增泛型支援

 

0x03 命令繫結示例

有了MyCommand類,我們就可以在ViewModel中建立一個MyCommand物件,然後在View中繫結了。示例如下:

 

0x03 相關下載

示例程式碼: https://github.com/durow/TestArea/tree/master/MVVMTest/CommandTest

 


更多內容歡迎訪問我的部落格:http://www.durow.vip

相關文章