国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

Prism中的Interaction機(jī)制的研究及改進(jìn)

2012-04-29 18:54:28劉慧玲陳曉軍王申申
電腦知識(shí)與技術(shù) 2012年21期
關(guān)鍵詞:控件調(diào)用開(kāi)發(fā)者

劉慧玲 陳曉軍 王申申

摘要:微軟的Prism開(kāi)源框架,非常適合作為復(fù)雜界面程序的框架庫(kù)。該文對(duì)Prism庫(kù)中的Interaction機(jī)制及源碼進(jìn)行了分析,并結(jié)合項(xiàng)目實(shí)際情況進(jìn)行了改進(jìn),大大簡(jiǎn)化了其實(shí)現(xiàn)過(guò)程。

關(guān)鍵詞:Prism;MVVM

中圖分類號(hào): TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2012)21-5110-03

MVVM是當(dāng)前最流行的界面開(kāi)發(fā)模式,尤其在它配合WPF后,功能更強(qiáng)大。但是,由于MVVM是在WPF出現(xiàn)后才發(fā)明的設(shè)計(jì)模式,WPF對(duì)它的支持不夠好。所以,使用MVVM模式開(kāi)發(fā)項(xiàng)目,在界面交互這些以往很簡(jiǎn)單的問(wèn)題上,往往需要比較復(fù)雜的代碼。Prism庫(kù)提供了很多的方法來(lái)支持MVVM模式。其中的Interaction機(jī)制能夠更簡(jiǎn)便的處理界面交互問(wèn)題。本人通過(guò)Interaction機(jī)制在項(xiàng)目中的實(shí)際應(yīng)用,簡(jiǎn)化了它的使用方式。

1 Prism和MVVM介紹

Prism開(kāi)源框架是由微軟Patterns & Practices團(tuán)隊(duì)所開(kāi)發(fā),目的在于幫助開(kāi)發(fā)人員構(gòu)建松散耦合的、更靈活、更易于維護(hù)并且更易于測(cè)試的WPF應(yīng)用或Silverlight應(yīng)用以及Windows Phone 7應(yīng)用。使用Prism可以使程序開(kāi)發(fā)更趨于模塊化,整個(gè)項(xiàng)目將由多個(gè)離散的、松耦合的模塊組成,而各個(gè)模塊又可以又不同的開(kāi)發(fā)者或團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)、測(cè)試和部署。

MVVM模式:MVVM模式是專為WPF打造的用于分離界面和程序邏輯的開(kāi)發(fā)模式。它是MVC的變種。MVC是最早的為大家所熟知的開(kāi)發(fā)界面程序的模式。但是它并不能完全干凈的分離邏輯和界面代碼。MVVM借助于WPF的binding功能可以滿足這個(gè)需求。MVVM是Model-View-ViewModel的簡(jiǎn)寫(xiě)。它把程序分為三層:界面呈現(xiàn)(view),界面邏輯(ViewModel),業(yè)務(wù)邏輯和數(shù)據(jù)(Model)。ViewModel用于和View中的控件元素綁定,響應(yīng)命令及事件處理。

2 MVVM模式中如何實(shí)現(xiàn)界面交互

通常一個(gè)界面程序在響應(yīng)事件或執(zhí)行命令前會(huì)與用戶有簡(jiǎn)單的交互,像是notification或confirmation messagebox。但是在MV VM模式中,這個(gè)交互是令人頭痛的。如果你用普通的messagebox,它將會(huì)破壞MVVM的規(guī)則(在viewmodel中不應(yīng)該直接引用控件,這違背了界面和業(yè)務(wù)代碼分離的原則)。MVVM模式中,一般有兩種方式來(lái)實(shí)現(xiàn)這種交互:

方式1.創(chuàng)建一個(gè)Service來(lái)顯示交互的控件,viewmodel能夠調(diào)用這個(gè)Service。這樣防止了View和ViewModel的直接引用。

方式2. ViewModel觸發(fā)一個(gè)事件,View定制這個(gè)事件,來(lái)顯示交互的界面。這種方式很好的隔離了界面和邏輯代碼。但是可能創(chuàng)建很多事件,雜亂的放在VIewModel和View兩側(cè),不好管理。

3 Prism庫(kù)的Interaction機(jī)制

Prism提供了一個(gè)Interaction機(jī)制實(shí)現(xiàn)了這兩種方式。

第一種方式很簡(jiǎn)單,Prism提供了InteractionService類。用戶通過(guò)Service直接調(diào)用交互控件。

第二種方式在View中將一個(gè)在ViewModel中聲明的Interaction Request Object和一個(gè)Behavior綁定。ViewModel觸發(fā)這個(gè)Inter action Request,相應(yīng)的行為將被執(zhí)行。Interaction Request Object封裝了具體的交互請(qǐng)求,響應(yīng)函數(shù),并且通過(guò)事件與View通信。View訂閱這個(gè)事件,并且創(chuàng)建一個(gè)Behavior(將被綁定到ViewModel提供的Interaction Request Object)。Prism庫(kù)提供了IInteraction Request接口和InteractionRequest類。ViewModel將定義一個(gè)InteractionRequest對(duì)象,當(dāng)要觸發(fā)交互行為時(shí)調(diào)用Raise函數(shù),并指定參數(shù):類型T的上下文對(duì)象和回調(diào)函數(shù)(交互完成后被調(diào)用)。這個(gè)上下文對(duì)象允許ViewModel傳遞數(shù)據(jù)和狀態(tài)給View。并且在交互完成后,ViewModel能得到變化后的數(shù)據(jù)和狀態(tài)。

Prism提供了預(yù)定義的上下文對(duì)象Notification和Confirmation。Notification用于顯示提示信息,只有Title和Content屬性。Confirmation繼承于Notification,增加一個(gè)屬性Confirmed。它用于實(shí)現(xiàn)MessageBox類型的交互,用于得到用戶的Yes,No的響應(yīng)。

下面是InteractionRequest在Viewmodel中的示例代碼:

public IInteractionRequest ConfirmCancelInteractionRequest

{

get

return this.confirmCancelInteractionRequest;

}}

this.confirmCancelInteractionRequest.Raise(

new Confirmation("Are you sure you wish to cancel"),

confirmation =>

{

if (confirmation.Confirmed)

{

this.NavigateToQuestionnaireList();

}

});

}

ConfirmCancelInteractionRequest用于View的數(shù)據(jù)綁定。

Interaction Request Object中封裝了交互邏輯,而交互界面定義在View中。這里用Behavior模式來(lái)封裝交互界面,它運(yùn)行開(kāi)發(fā)者綁定任一種適合的Behavior到Interaction Request Object。Prism庫(kù)定義了InteractionRequestTrigger來(lái)監(jiān)聽(tīng)Viewmodel發(fā)出的Inter action Request。當(dāng)ViewModel調(diào)用Raise函數(shù)時(shí),InteractionRequestTrigger將調(diào)用指定的行為。Prism庫(kù)提供PopupChildWindowAc tion類來(lái)顯示交互界面。通過(guò)它的ContentTemplate屬性,開(kāi)發(fā)者可以定制交互界面。下面是xaml文件中相應(yīng)的代碼:

SourceObject="{Binding ConfirmCancelInteractionRequest}">

ContentTemplate="{StaticResource ConfirmWindowTemplate}"/>

猜你喜歡
控件調(diào)用開(kāi)發(fā)者
核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
16%游戲開(kāi)發(fā)者看好VR
CHIP新電腦(2016年3期)2016-03-10 13:06:42
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年8期)2015-05-30 12:27:10
iOS開(kāi)發(fā)者調(diào)查
電腦迷(2015年4期)2015-05-30 05:24:09
利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
安卓開(kāi)發(fā)者之煩惱
就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
安溪县| 抚顺县| 桓台县| 大冶市| 镇平县| 太和县| 鹿泉市| 双牌县| 黎城县| 日土县| 舞钢市| 陵川县| 稻城县| 民和| 普陀区| 灌阳县| 绥滨县| 江孜县| 新绛县| 乐清市| 铜山县| 永定县| 慈溪市| 黄浦区| 惠安县| 慈利县| 桓台县| 厦门市| 建平县| 读书| 盐边县| 怀化市| 茶陵县| 安阳市| 曲周县| 安福县| 尼木县| 肥乡县| 靖江市| 建昌县| 绩溪县|