探秘Model-View-ViewModel設計模式
Model-View-ViewModel和MVC、MVP設計模式的不同點
Model-View-ViewModel設計模式是MVP設計模式與WPF技術相結合的產物,對于一些很常見的如Model-View-Controller(MVC)設計模式和Model-View-Presenter(MVP)設計模式來說,當在WPF下使用時它們都有一個很大的缺點:就是它們根本沒有考慮到WPF強大的數據綁定技術。在這些模式中,Controller或者Presenter對視圖的行為負責,就像填充TextBox的文本內容,加載ListBox,填充表格的內容等等。而這些在WPF中都能輕松解決,因為正好WPF最大的優點之一就是它豐富的數據綁定能力。如果在WPF中使用MVC或者MVP設計模式,就可能完全無法利用WPF中數據綁定的方便性,而Model-View-ViewModel則不一樣。
Model-View-ViewModel的定義
Model-View-ViewModel設計模式最早是由John Gossman引入的,感興趣的朋友可以看看“http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx”這篇文章。該模型提供了一個純凈的Model,創建了一個抽象的視圖來容納狀態,并且數據從一個由可視化設計器創建的視圖綁定到一個抽象的視圖上。該可視化設計器主要是Microsoft Expression Blend工具,而這個抽象的視圖則是ViewModel。關鍵的地方是通過數據綁定在View與ViewModel模型之間進行雙向的聯系。當正確地使用該設計模式后,每一個View除了純凈的XAML和非常少量的后置代碼外不會再包含任何東西,徹底地做到了界面展示和業務邏輯的分離,讓程序員更加專注于代碼的編寫。
ViewModel
ViewModel的作用是讓Mdoel更加適合于View。例如你有一個返回了一個泛型集合IList
因為WPF內置了Command模式,對于像Button控件之類的UI元素來說都有一個Command的屬性,它是WPF所定義的ICommand類型。可以把這些命令放到ViewModel中并以公有屬性的形式暴露出來,這樣就可以讓View對其進行綁定。這極其強大,因為它可以把ModelView中的可執行代碼綁定到窗體的Button上。
Demo
以下是使用了Model-View-ViewModel 設計模式的一個簡單的WPF應用程序例子,感興趣的話可以下載代碼看看。后臺使用的是大家常見的Northwnd數據庫:
相關的類關系圖如下:
原文標題:Model-View-ViewModel 設計模式介紹
鏈接:http://www.cnblogs.com/gyche/archive/2009/09/21/1557307.html
【編輯推薦】