国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

WPF MVVM應用方式解析

開發 開發工具
WPF MVVM是一種專門針對WPF開發工具的一種模式。對于一個開發經驗豐富,經常使用Binding的開發人員來說,這一模式是非常有用的。

WPF開發工具中有各種各樣的模式,運用這些不同的模式可以為我們創造各種不同的基于圖像處理的功能需求。其中,WPF MVVM是專為WPF打造的模式,也可以說MVVM僅僅是MVC的一個變種,但無論如何,就實踐而言,如果你或你的團隊沒有使用"Binding"的習慣,那么研究MVVM就沒有多大意義。#t#

另外,個人覺得,使用Command以及打造一種合理的簡化的方式去使用Command也與使用Binding一樣重要。

為了解決現實世界中的問題,我們需要將現實世界中的事物加以抽象,然后得到了Domain Object,無論貧血的還是富血的,我們都可以簡單地把他們歸結為"由現實世界抽象出來的模型",也就是我們的model,也就M-V-VM中的"M"。

但其無法與我們的用戶進行交互,所以,我們需要為其創建一個界面(視圖,View),該視圖可以與用戶輸入設備進行交互,這很棒,但問題是如何將View與我們的model關聯起來? Binding便可以發揮作用了,比如視圖上的某一個文本框中的文本和Model中的"用戶名"關聯起來,用戶便可以通過操作該文本框來訪問和修改Model的"用戶名"了。

這是極其簡單的情況,但實際編程時我們發現,Model中的屬性(與方法)往往不那么容易與View中的界面控件關聯起來,比如,"類型不匹配": 界面控件所需要的類型與模型中屬性提高的類型不匹配。 "需要額外操作": 模型中的數據需要經過一些額外的處理才能傳給視圖,反之亦然。 此時,我們意識到View似乎需要一個"Helper"類來處理一些額外工作。

這個helper所包含的代碼可以放在除了Model外的很多地方(我們現在不考慮貧血富血之類的爭論),比如View中,記得自己剛學習窗體程序開發時就是這么干的,將絕大多數處理邏輯放在那個所謂的CodeBehind中。

后來,正如大家在各種設計模式書籍中所看到的一樣,為了將View和Model剝離開來,實現view可替換(比如你可以講自己精心設計的軟件同時運行于窗體程序,Web甚至Mobile上),便有了MVC。 有了MVC以后似乎就開始滋生M-V-XXX之類的爭論與變種模型,比如MVP以及這里的WPF MVVM,甚至MVP也有著Supervising Controller與Presentation Model兩種方式。

但主要圍繞兩個問題,一是model與view之間的關系,完全隔離的?單向的還是雙向的? 二是這個"XXX"需要完成哪些功能,簡單流程調度?復雜規則處理? OK,這些爭論都沒有關系,是否采用某種模式取決于你的開發所處的環境(比如語言特性,框架特性)以及你的業務特性以及所面臨的主要變化點等等。

但與MVC,MVP所不同的是,WPF MVVM的引入不僅僅是技術上的原因(解除耦合應對變化等老生常談),另外一個很大原因是:軟件團隊開發方式的改變。如果你做過一段時間的WPF項目開發的話,你可能會有比較明顯的感覺:在View層打造上,如何分配程序員和美工的工作。

 以前我們團隊采用的便是"集成模式",我便兼職了其中的"Integrator"角色。這還不錯。但說實在的,這僅僅是一個在特殊情況下不得已而為之的暫時方案,所以我們付出了很大的努力開始轉向"收割模式"了,要轉向這個模式,至少需要兩個基本條件:

(1)你擁有能夠熟練運用Blend等工具能為程序員輸出XAML的美工,他專注于純粹的UI/UE,另外他還必須具有一定的"程序員"思維。以便輸出的東西能很好地作為程序的一部分而運轉起來,而不是僅僅"看上去"是那樣的。

(2)你需要能夠脫離View層但仍能編寫出高質量代碼的程序員。

幸運的是,我們在努力創造條件1,并取得了很好的效果。(你可以招一個具有Flash腳本編寫經驗的并且有極大的學習熱情的美工人員,并對他進行Blend的相關培訓)。 而WPF MVVM模式為我們實現第二個條件提供了極大的便利。 為什么MVC/MVP模式不行而MVVM可以呢? 很簡單,在MVC和MVP模式中,View層都具有很多代碼邏輯,開發View層的是程序員,雖然UI/UE團隊會做很多工作,但這個層的"實現者"仍然是程序員。

在以前的開發中,其工作得很好,而在WPF開發中程序員對View層的展現顯得力不從心了,美工(指符合上面條件1的美工)雖然很擅長,但他會說"可惜我不會程序"。于是,我們需要一種方式將View層的代碼邏輯抽取出來,并View層很純粹以便完全讓美工去打造它。相應地,需要將View層的相應邏輯抽取到一個代碼層上,以便讓程序員專注在這里。

回想一下,我們只所以要在View(Xaml)背后寫一些代碼(C#),無非是想傳遞一些數據以及傳遞數據時的數據的處理或在用戶與界面控件進行交互時執行一些操作,最簡單的例子是在MVC中當界面發生交互時View去調用Controler中的某個方法,以便將該操作的相應"指示"傳遞到"后臺"去。 在以前的技術中,這樣的"銜接性"的代碼是必須的。

而在WPF中,則可以通過另外的技術來進行層與層之間的"銜接",這就是"Binding" 和"Command",以及稍后我們會提到的"AttachBehavior"。 通過Binding,我們可以實現數據的傳遞; 通過Command,我們可以實現操作的調用。(AttachBehavior的作用稍后再談)。 Binding和Command是可以寫在XAML中的,這樣看來XAML后面對于的CS文件可以被完全拋棄或不予理會了。 這樣的XAML文件正是美工所需要的。

而這些對于Binding以及Command的定義描述以及其他相關信息的代碼應該放在那里呢,當然不是View,更不是Model,是"ViewModel"。 ViewModel是為這個View所量身定制的,它包含了Binding是所需的相關信息,比如Converter以及為View的Binding提供DataContext,它包含了Command的定義以便View層可以直接使用,另外,它還是一個變種的Controler,它得負責業務流程的調度。

于是,正如"時勢造英雄"所言,WPF MVVM就誕生了。

責任編輯:曹凱 來源: 博客園
相關推薦

2009-12-28 13:57:39

WPF文字

2009-12-29 14:20:27

WPF路徑

2009-12-28 16:37:46

WPF異步模式

2009-12-29 15:05:29

WPF支持國際化

2009-12-24 09:48:29

WPF分割條

2021-01-21 05:50:28

MVVM模式Wpf

2009-07-24 13:54:39

MVVM模式

2009-12-28 10:47:58

WPF繪圖

2010-01-27 14:24:28

Android界面互調

2024-04-19 08:38:36

WPFMVVM設計模式

2009-12-28 13:18:17

WPF設備輸入

2024-04-28 10:22:08

.NETMVVM應用工具包

2010-02-02 14:45:35

C++ typeof

2017-02-24 10:02:04

AndroidMVVM應用框架

2009-12-23 17:31:56

WPF Style

2009-12-28 13:23:19

WPF導出圖片

2009-12-29 10:32:24

WPF Listbox

2010-01-25 11:29:33

Android計時器

2010-03-03 17:58:16

Python同步隊列

2017-03-02 11:10:39

AndroidMVVM應用程序
點贊
收藏

51CTO技術棧公眾號

在线观看免费毛片| 成人偷拍自拍| 亚洲国产成人av网| 亚洲欧美电影在线观看| 欧洲美女日日| 欧美成年人网站| 9999热视频在线观看| 福利视频一区二区| 网上成人av| 久久精品人人做人人综合| 欧洲金发美女大战黑人| 亚洲成人三区| **网站欧美大片在线观看| 欧美大片免费观看在线观看网站推荐 | 亚洲直播在线一区| 在线看a视频| 久久xxxx| 久久深夜福利免费观看| 国产中文在线视频| 久久久免费视频网站| 亚洲人人精品| 亚洲成人亚洲激情| 九色porny丨首页在线| 在线观看日产精品| 天堂中文在线8| 欧美性感美女h网站在线观看免费| 116美女写真午夜一级久久| 亚洲黄色性网站| 日本视频二区| 亚洲国产欧美在线人成| 在线欧美成人| 欧美性xxxxxx少妇| 国产精品剧情| 亚洲成人精品久久| 亚洲风情在线资源| 国产一区二区三区在线观看视频| 黑人巨大亚洲一区二区久 | 欧美va天堂在线| 国产日韩欧美二区| 亚洲欧美日韩国产| 天堂av一区二区| 国产一区二区日韩精品| 日韩中文字幕在线免费| 久久人人97超碰com| 午夜久久久精品| 亚洲精品国产第一综合99久久| 亚欧黄色av| 在线欧美一区二区| 91九色在线播放| 丝袜亚洲欧美日韩综合| 精品人人人人| 91一区二区三区| 男女视频一区二区| 国产日韩一区二区在线观看| 久久久亚洲国产美女国产盗摄| 热久久精品免费视频| 欧洲精品一区二区| 污视频网站免费看| 国产精品灌醉下药二区| 天堂在线看视频| 国产探花视频在线观看| 亚洲宅男天堂在线观看无病毒| 国产精品va在线观看视色| 一区二区三区视频免费观看| 国产日韩精品入口| 国产精品日本| 日本丰满少妇xxxx| 亚洲动漫第一页| 免费在线播放电影| 欧美激情亚洲国产| 伊人成人网在线看| 日本韩国欧美在线观看| 午夜精品久久久久久久久久| 99热99re6国产在线播放| 久久免费精品日本久久中文字幕| 欧美在线视屏| 久久国产精品网| 五月天网站亚洲| 日本不卡一二三| 国产精品极品美女粉嫩高清在线| 久久激情中文| 男生操女生视频网站| 91精品婷婷国产综合久久性色| 3d动漫一区二区三区在线观看| 91亚洲精品在线| 国产福利视频一区二区三区| 在线播放av网站| 中文字幕在线成人| 亚洲一级淫片| 黄色国产小视频| 69堂精品视频| 免费久久久久久久久| 久久久www| 黄色在线观看www| 精品欧美日韩| 久久国产精品免费精品3p| 国产一区国产精品| 亚洲欧美视频一区| 成人av网站免费| 久久亚洲资源| 国产伦精品一区二区三| 福利电影一区二区三区| 色在线视频网| 图片区小说区区亚洲五月| 国产成人77亚洲精品www| 久久久久国产精品免费| 亚洲成av人片www| 精品综合久久88少妇激情| 日本女优北野望在线电影| 成人免费在线视频网址| 91精品国产色综合久久不卡电影 | 91丨porny丨国产| 亚洲成人男人天堂| 欧美理论片在线观看| 日韩精品亚洲元码| 日韩a级大片| 一道本在线观看视频| 精品av在线播放| 国产欧美自拍一区| 成人区一区二区| 欧美精品日韩一区| 凹凸成人精品亚洲精品密奴| 国产精品久久久久7777| 5566中文字幕一区二区电影| 国产综合精品一区| 浓精h攵女乱爱av| 亚洲精品少妇网址| 噜噜噜91成人网| 暖暖视频在线免费观看| 国内精品久久久久久久| 久久久久国产精品人| 久久综合九色| 免费a在线看| 欧美一区二区三区爽大粗免费| 制服丝袜一区二区三区| 日韩一区精品视频| 福利视频在线看| 99久久精品国产一区二区三区| 麻豆传媒在线播放| 中文字幕免费高| 91九色在线看| 亚洲淫片在线视频| 国产日韩欧美亚洲| japansex久久高清精品| 99久re热视频精品98| 精品嫩草影院久久| 日韩精品久久久久久| 国产精品视频中文字幕| 亚洲国产欧美一区二区三区同亚洲 | 国产无套内射久久久国产| 亚洲女人被黑人巨大进入| 国产一区二区电影| 手机av在线| 女人和拘做爰正片视频| 在线视频一区二区| 国产日韩高清在线| 日本少妇精品亚洲第一区| 羞羞免费视频网站| 日韩av电影院| 日本黄色一区二区| 久久狠狠婷婷| 亚洲色图官网| www.涩涩涩| 国产精品久久久久77777| 欧美日韩欧美一区二区| 国产欧美午夜| 日韩漫画puputoon| 国产主播在线看| 精品久久久久久久久国产字幕| 日韩一区二区在线免费| 免费av在线播放| 欧美日本一区二区在线观看| 亚洲人成小说网站色在线| 精品国产91久久久久久老师| 99九九99九九九视频精品| 影音先锋亚洲精品| 欧美日韩18| 精品在线播放| 一区二区三区亚洲变态调教大结局| 亚洲wwwww| 欧美不卡福利| 成人动漫视频在线观看免费| 一区二区成人在线观看| 亚洲欧美日韩久久精品| 久久天堂av综合合色蜜桃网| 99国产精品久久久久| 久久大逼视频| 午夜宅男久久久| 亚洲视频1区2区| 国产精品一区二区你懂的| 日韩一区二区三区精品视频| 亚洲欧美日产图| 成年人视频在线看| 超碰在线cao| 精品丝袜在线| 高清电影在线观看免费| 伊人久久影院| 欧美日韩一区二区在线| 欧美国产日韩视频| 国产精品国产一区二区|