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...