MVVM和MVVMLight框架介紹及在項(xiàng)目中的使用詳解
一、MVVM 和 MVVMLight介紹
MVVM是Model-View-ViewModel的簡(jiǎn)寫。類似于目前比較流行的MVC、MVP設(shè)計(jì)模式,主要目的是為了分離視圖(View)和模型(Model)的耦合。
它是一種極度優(yōu)秀的設(shè)計(jì)模式,但并非框架級(jí)別的東西,由MVP(Model-View-Presenter)模式與WPF結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過來的一種新型架構(gòu)。
立足于原有MVP框架并且把WPF的新特性糅合進(jìn)去,以應(yīng)對(duì)PC端開發(fā)日益復(fù)雜的需求變化。
結(jié)構(gòu)如圖所示:

相對(duì)于之前把邏輯結(jié)構(gòu)寫在Code Behind 里面的方式,MVVM幾乎完全解耦了視圖和邏輯業(yè)務(wù)的關(guān)系,通過數(shù)據(jù)綁定和命令來處理UI屬性
及事件驅(qū)動(dòng)。同理,ViewModel的視圖交互業(yè)務(wù)邏輯處理導(dǎo)致的屬性變更也會(huì)通知到View前端,讓View前端實(shí)時(shí)更新。Model中存放數(shù)據(jù)模型和數(shù)據(jù)邏輯、業(yè)務(wù)邏輯。
其實(shí)我個(gè)人認(rèn)為,數(shù)據(jù)和業(yè)務(wù)交互這一層還是應(yīng)該另外獨(dú)立,Model中完全就是實(shí)體模型,這樣更清晰。
這種類型的雙向綁定非常優(yōu)秀,View的變動(dòng),會(huì)自動(dòng)反應(yīng)到ViewModel上,反之亦然。目前JS前端框架AngularJS也是采用這種設(shè)計(jì)模式。
MVVM模式和MVC模式一樣,主要目的是分離視圖(View)和模型(Model),有幾大優(yōu)點(diǎn)
1. 低耦合:視圖(View)可以獨(dú)立于Model變化和修改,一個(gè)ViewModel可以綁定到不同的View上,當(dāng)View變化的時(shí)候Model可以不變,當(dāng)Model變化的時(shí)候View也可以不變。
2. 可重用性:可以把一些視圖邏輯放在一個(gè)ViewModel里面,讓很多View重用這段視圖邏輯。
3. 獨(dú)立開發(fā):開發(fā)人員可以專注于業(yè)務(wù)邏輯和數(shù)據(jù)的開發(fā)(ViewModel),設(shè)計(jì)人員可以專注于頁面設(shè)計(jì),使用Expression Blend可以很容易設(shè)計(jì)界面并生成xml代碼。
4. 可測(cè)試:界面素來是比較難于測(cè)試的,而現(xiàn)在測(cè)試可以針對(duì)ViewModel來寫。
希望對(duì)MVVM有更進(jìn)一步了解的同學(xué)可以看看這篇文章:https://www.codeproject.com/kb/wpf/wpfmvvmquickstart.aspx,
作者從MVVM的模式介紹到數(shù)據(jù)綁定、消息通知、命令等幾個(gè)主要方面都有詳細(xì)的說明。
如果你目前正在進(jìn)行微軟的 WPF 、Windows Phone、Windows 8、SilverLight相關(guān)項(xiàng)目的開發(fā),我先很有必要了解一下MVVM Light框架。
它輕量(相對(duì)于Prism),專注(僅負(fù)責(zé)MVVM架構(gòu)模式的實(shí)現(xiàn),沒有其他多余的組件),高效(使用簡(jiǎn)易,省時(shí)減力),能夠幫助你更好的開發(fā)你的應(yīng)用。
MVVMLight的作者Laurent Bugnion 是個(gè)微軟MVP,這個(gè)是MVVMLight的官網(wǎng):http://www.mvvmlight.net/,上面有詳細(xì)的介紹和視頻文檔。
有趣的是,MVVMLight的產(chǎn)品Logo是一根羽毛,寓意了我們上面提到的優(yōu)點(diǎn):輕量、專業(yè)、高效,不知道作者是不是這個(gè)意思。

二、如何在你的WPF應(yīng)用中使用MVMLight
主要使用方式有兩種;
一種是去官網(wǎng)上下載MVVMLight Toolkit,安裝之后,VS模板中會(huì)出現(xiàn)MvvmLight項(xiàng)目模板,你可以直接使用該項(xiàng)目模板來創(chuàng)建項(xiàng)目了。
里面會(huì)包含默認(rèn)的ViewModelLocator和MainViewModel,MainViewModel就是你Main視圖的ViewModel了,而ViewModelLocator是一個(gè)全局的ViewModel加載注冊(cè)器,這個(gè)第二篇會(huì)詳細(xì)說到。
另一種方式就是去NuGet上安裝,這無疑是最便捷的事了。在NuGet 工具箱上搜索 MVVM Light,可以看到兩個(gè)項(xiàng)目,一個(gè)是MVVM Light , 一個(gè)是 MVVM Light libraries only。
當(dāng)前版本是5.3,說明MVVM Light的更新速度還是挺快的,Prerelease中還有 V5.4 的 ALAPHA 版本。
Nuget上這兩個(gè)項(xiàng)目的區(qū)別就是MVVM Light除了必要的GalaSoft 組件之外,還會(huì)額外添加相關(guān)分層文件目錄形成簡(jiǎn)單的MVVMLight成型框架。

如圖它會(huì)幫你生成ViewModel文件夾,里面包含MainViewModel和ViewModelLocator文件。

至此,一個(gè)基于MVVMLight的WPF項(xiàng)目框架基本搭建完成了,下面一篇我們?cè)敿?xì)說下框架的結(jié)構(gòu)。
以上就是MVVM和MVVMLight介紹及在項(xiàng)目中的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于MVVM和MVVMLight介紹及使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
AsyncTask陷阱之:Handler,Looper與MessageQueue的詳解
本篇文章是對(duì)Handler,Looper與MessageQueue進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 驗(yàn)證碼功能實(shí)現(xiàn)代碼的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-08-08
Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法
本篇文章小編為大家介紹,Android中 自定義數(shù)據(jù)綁定適配器BaseAdapter的方法。需要的朋友參考下2013-04-04
Android 動(dòng)態(tài)顯示和隱藏狀態(tài)欄詳解及實(shí)例
這篇文章主要介紹了Android 動(dòng)態(tài)顯示和隱藏狀態(tài)欄的相關(guān)資料,需要的朋友可以參考下2017-06-06
Android開發(fā)ListView中下拉刷新上拉加載及帶列的橫向滾動(dòng)實(shí)現(xiàn)方法
這篇文章主要介紹了Android開發(fā)ListView中下拉刷新上拉加載及帶列的橫向滾動(dòng)實(shí)現(xiàn)方法的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法
本篇文章主要介紹了android實(shí)現(xiàn)支付寶咻一咻的幾種思路方法,詳解的介紹了幾種實(shí)現(xiàn)咻一咻的思路和方法,有需要的可以了解一下。2016-11-11
Android Toast的幾種使用方式及注意事項(xiàng)
Toast是Android中常用的組件,下面介紹下Toast使用的幾種方式和注意事項(xiàng),本文給大家分享Toast的使用方式,感興趣的朋友一起看看吧2024-02-02
Android 6.0調(diào)用相機(jī)圖冊(cè)崩潰的完美解決方案
這篇文章主要介紹了Android 6.0調(diào)用相機(jī)圖冊(cè)崩潰的完美解決方案,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

