新聞中心
Model-View-ViewModel很多人肯定感覺(jué)不太熟悉,這里我們將介紹Model-View-ViewModel與MVC、MVP等模式的不同點(diǎn),同時(shí)還要以DEMO的形式來(lái)進(jìn)行開(kāi)發(fā)講解。

Model-View-ViewModel和MVC、MVP設(shè)計(jì)模式的不同點(diǎn)
Model-View-ViewModel設(shè)計(jì)模式是MVP設(shè)計(jì)模式與WPF技術(shù)相結(jié)合的產(chǎn)物,對(duì)于一些很常見(jiàn)的如Model-View-Controller(MVC)設(shè)計(jì)模式和Model-View-Presenter(MVP)設(shè)計(jì)模式來(lái)說(shuō),當(dāng)在WPF下使用時(shí)它們都有一個(gè)很大的缺點(diǎn):就是它們根本沒(méi)有考慮到WPF強(qiáng)大的數(shù)據(jù)綁定技術(shù)。在這些模式中,Controller或者Presenter對(duì)視圖的行為負(fù)責(zé),就像填充TextBox的文本內(nèi)容,加載ListBox,填充表格的內(nèi)容等等。而這些在WPF中都能輕松解決,因?yàn)檎肳PF最大的優(yōu)點(diǎn)之一就是它豐富的數(shù)據(jù)綁定能力。如果在WPF中使用MVC或者M(jìn)VP設(shè)計(jì)模式,就可能完全無(wú)法利用WPF中數(shù)據(jù)綁定的方便性,而Model-View-ViewModel則不一樣。
Model-View-ViewModel的定義
Model-View-ViewModel設(shè)計(jì)模式最早是由John Gossman引入的,感興趣的朋友可以看看“http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx”這篇文章。該模型提供了一個(gè)純凈的Model,創(chuàng)建了一個(gè)抽象的視圖來(lái)容納狀態(tài),并且數(shù)據(jù)從一個(gè)由可視化設(shè)計(jì)器創(chuàng)建的視圖綁定到一個(gè)抽象的視圖上。該可視化設(shè)計(jì)器主要是Microsoft Expression Blend工具,而這個(gè)抽象的視圖則是ViewModel。關(guān)鍵的地方是通過(guò)數(shù)據(jù)綁定在View與ViewModel模型之間進(jìn)行雙向的聯(lián)系。當(dāng)正確地使用該設(shè)計(jì)模式后,每一個(gè)View除了純凈的XAML和非常少量的后置代碼外不會(huì)再包含任何東西,徹底地做到了界面展示和業(yè)務(wù)邏輯的分離,讓程序員更加專(zhuān)注于代碼的編寫(xiě)。
ViewModel
ViewModel的作用是讓Mdoel更加適合于View。例如你有一個(gè)返回了一個(gè)泛型集合IList 的方法,但你實(shí)際上可能還會(huì)把它轉(zhuǎn)換到一個(gè)對(duì)WPF更加友好的類(lèi)中以更加方便地進(jìn)行數(shù)據(jù)綁定。通過(guò)ViewModel,可以把IList 類(lèi)型的Model集合轉(zhuǎn)換成如CollectionView之類(lèi)的東西以方便WPF中的UI界面元素進(jìn)行數(shù)據(jù)綁定,完成這項(xiàng)任務(wù)最關(guān)鍵的地方在于在ViewModel中暴露出一個(gè)公共的屬性。和Controlller類(lèi)似,ViewModel也能用來(lái)容納View的狀態(tài)以及執(zhí)行View需要的任何命令。
因?yàn)閃PF內(nèi)置了Command模式,對(duì)于像Button控件之類(lèi)的UI元素來(lái)說(shuō)都有一個(gè)Command的屬性,它是WPF所定義的ICommand類(lèi)型??梢园堰@些命令放到ViewModel中并以公有屬性的形式暴露出來(lái),這樣就可以讓View對(duì)其進(jìn)行綁定。這極其強(qiáng)大,因?yàn)樗梢园袽odelView中的可執(zhí)行代碼綁定到窗體的Button上。
Demo
以下是使用了Model-View-ViewModel 設(shè)計(jì)模式的一個(gè)簡(jiǎn)單的WPF應(yīng)用程序例子,感興趣的話可以下載代碼看看。后臺(tái)使用的是大家常見(jiàn)的Northwnd數(shù)據(jù)庫(kù):
相關(guān)的類(lèi)關(guān)系圖如下:
當(dāng)前標(biāo)題:探秘Model-View-ViewModel設(shè)計(jì)模式
文章URL:http://fisionsoft.com.cn/article/coiscdc.html


咨詢(xún)
建站咨詢(xún)
