wp8使用mvvm模式簡單例子

2021-06-22 16:34:58 字數 3279 閱讀 4385

mvvm是silverlight/wpf下的mvc昇華

通過乙個簡單的加法計算器例子來說明mvvm是什麼

在設計介面完成設計之後,顯示簡單的布局,如下圖:

然後來比較,傳統的直接方式,mvc和mvvm三種的區別

1.最直接的方式無非就是雙擊button按鈕,在onclick事件中獲得兩個textbox的值,進行相加然後賦值給textblock

這樣使得xaml.cs檔案中直接操作了介面元素

2.mvc模式

首先定義乙個addmodel類,並繼承dependencyobject

public class addmodel:dependencyobject

set

}// using a dependencyproperty as the backing store for number1. this enables animation, styling, binding, etc...

public static readonly dependencyproperty number1property =

dependencyproperty.register("number1", typeof(int), typeof(addmodel),null);

public int number2

set

}// using a dependencyproperty as the backing store for number2. this enables animation, styling, binding, etc...

public static readonly dependencyproperty number2property =

dependencyproperty.register("number2", typeof(int), typeof(addmodel), null);

public int result

set

}// using a dependencyproperty as the backing store for result. this enables animation, styling, binding, etc...

public static readonly dependencyproperty resultproperty =

dependencyproperty.register("result", typeof(int), typeof(addmodel), null);

}

繼承了dependencyobject之後定義屬性快捷方式如下:

定義好三個屬性之後

在前台xaml檔案引入命名空間

並在resources中宣告

將上面的幾個控制項的父容器,grid的datacontext設定為addmodel

並將各個控制項的text屬性繫結對應的值,模式為雙向繫結

為了方便看清楚各個控制項text的繫結情況遂刪除了一些屬性

在xaml.cs後台中,使用button的onclick事件

private void button_click(object sender, routedeventargs e)

獲取到resources中的addmodel

並計算result

啟動執行

這樣一來,在後台的xaml.cs中就沒有操作介面元素了

但是還是要根據button的onclick事件才能實現

而在本例中mvvm模式的終極目標就是要消除onclick!

3.mvvm模式

預備知識

button有乙個command和commandparameter屬性

當button的onclick事件被觸發時

command屬性對應的   繼承了icommand介面的類的execute方法將會被執行,方法的引數是commandparameter屬性(object型別)

於是需要乙個新的類,叫做addcommand,繼承了icommand介面

public class addcommand:icommand

public void execute(object parameter)

public event eventhandler canexecutechanged;

}

並在addmodel中新增乙個唯讀屬性addcmd

public icommand addcmd  

}

返回xaml前台

在button的屬性中增加command和commandparameter屬性的繫結

(注意將onclick事件清除)

啟動執行

完成計算

這是後台中沒有任何對前台介面元素的操作

mvvm完成

最後,思路有點亂

mvvm是靠乙個繼承了icommand介面的類來實現的

當button的onclick事件被觸發之後

command屬性對應的物件(這裡為addmodel的addcmd屬性,該屬性是唯讀的,返回乙個addcommand物件)的execute方法會被執行

commandparameter屬性對應的值會被當做引數傳入execute方法(這裡commandparameter的值為addmodel本身)

在execute方法中實現計算的操作

由於介面的控制項資料來源是雙向繫結的

addmodel的值一改變

介面就會顯示出對應的值

那麼這麼做的好處是什麼?

可以從**中看到

前台的ui控制項只要設定了資料來源,並繫結了相應的屬性就不需要進行任何操作了

在後台沒有任務的業務邏輯處理的**

所有的業務**都在addcommand的execute方法中完成

而addmodel為ui控制項的資料繫結提供了模型

wp8使用mvvm模式簡單例子

mvvm是silverlight wpf下的mvc昇華 通過乙個簡單的加法計算器例子來說明mvvm是什麼 在設計介面完成設計之後,顯示簡單的布局,如下圖 然後來比較,傳統的直接方式,mvc和mvvm三種的區別 1.最直接的方式無非就是雙擊button按鈕,在onclick事件中獲得兩個textbox...

WP8 在Unity中使用OpenXLive

unity 4.2正式版開始新增了對windows 8 windows phone 8等其他平台的支援,而且開發者可以免費使用unity引擎來開發遊戲了。而作為windows phone和windows 8平台上最大的遊戲社交網路,openxlive也可以無縫支援unity for wp8和wind...

wp8下壓縮紋理的使用(dds)

個人認為,既然手機裝置支援wp8支援dx11,那麼dds的壓縮紋理必然是被支援的。不過依然不保證完全如此。希望看此文章的同仁留意。微軟wp系統在記憶體管理上有乙個不同於ios和android的地方,那就是給程式預先分配的記憶體是有限的。正常情況是150mb,通過設定一些標誌可以允許180mb或者30...