MVVM模式之命令綁定
本人技術水平有限,我喜歡用最通俗的想法去思考問題.
那些晦澀難懂的詞匯,我在這里都不會提起,我也就用一些自認為還算通俗的語言去講解.
下面就來談談MVVM模式.(每個人思考問題是不一樣的,也許你有你的想法!)
所謂MVVM模式,就是UI和邏輯分開的模式.首先我們需要知道為什么需要分開,以及分開會有什么樣的好處.
假設:我們做了一個顯示一句話的小程序.今天我們做好了,界面如下:
很簡單的界面,可是明天突然有需求了.就是要重新換一個新的界面,那么所有的變量都變了,那么以傳統的做法,你代碼都在當前MainPage里,那么,要換界面,你就需要更改所有的變量名,還有很多邏輯代碼也用到了與控件相關的變量,那么修改起來,會相當的麻煩.還要復制拷貝代碼;當我們使用了MVVM模式,UI和邏輯代碼分離開來.那么再當你換掉界面時,我們只需要在新的界面上的控件,重新綁定下就可以了,而關於邏輯的不需要我們做任何的改動,會很方便.
打個比方來說:我們的手機都需要用到電池.
蘋果的手機,就很像我們傳統的代碼.因為他的電池不可以換,如果換起來,會相當的麻煩,因為里面的電池和手機是緊密相連的,如果要換,我們需要做很復雜的操作,把電池去下,然后還要用焊接的方法,把電池的兩根線焊到主板上.如果你弄錯了,就打開不了手機.就等於程序變量,如果你換錯了,程序就報錯一樣.
諾基亞手機就像我們的MVVM模式,我們只需要取下外殼,取下沒電的電池,裝上新電池,就可以了.很簡單.不用考慮焊接的問題,所以很簡單.
下面,來說下,如何創建一個簡單的示例:
要實現的內容:就是點擊按鈕,顯示一句話,且事件的代碼邏輯不在頁面后台類.通過綁定按鈕的Command命令去執行.
實現步驟:
首先,我們需要創建一個類.實現ICommand這個接口,代碼如下:
namespace ShowMsg { public class MyCommand : ICommand { public bool CanExecute(object parameter) { return true; //表示是否執行下面那個Execute方法. } public event EventHandler CanExecuteChanged; public void Execute(object parameter) //這里是定義按鈕按下去,需要執行的內容 { MessageBox.Show("我這里是定義死了,你可以通過傳值的方法,來自定義顯示的內容."); } } }
接着,我們創建一個viewmodel類,這個類也就是所謂的業務邏輯類.(這里暫時沒講到屬性變化問題,所以沒有去實現INotifyPropertyChanged這個接口);
這個類的代碼如下:
namespace ShowMsg { public class ViewModel { public ICommand MyCmd { get { return new MyCommand(); } } } }
所有的工作都准備好了,我們就為xaml的page類的構造函數那里,把viewmodel的實例綁定到xaml這個頁面的數據上下文中,然后我們值需要給按鈕綁定下Command屬性,就可以了代碼如下:
{ public partial class MainPage : PhoneApplicationPage { // 構造函數 public MainPage() { InitializeComponent(); DataContext = new ViewModel(); //將viewModel這個實例綁定到當前頁面的D數據上下文上! } } }
最后是按鈕的綁定.
<Button Content="ShowMsg" Command="{Binding MyCmd}" Height="158" Margin="91,244,106,0" Name="button1" VerticalAlignment="Top" />
當我們點擊按鈕,就會執行了.效果如圖:
最后希望這篇文章能對大家還是有點幫助的,如果大家認為還算能聽懂,那么我會在不久,加上關於命令有參數的處理方法.