淺談MVVM模式之命令綁定


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" />

 

當我們點擊按鈕,就會執行了.效果如圖:

 

 

 

       最后希望這篇文章能對大家還是有點幫助的,如果大家認為還算能聽懂,那么我會在不久,加上關於命令有參數的處理方法.

      


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM