日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Prism中如何實(shí)現(xiàn)一般路由事件的綁定

用過一段時(shí)間的Prism4了,剛開始很不習(xí)慣,現(xiàn)在感覺這種松耦合機(jī)制是有它的道理。現(xiàn)在便是想整理一些東西出來,方便記憶吧。我們?cè)趯?shí)現(xiàn)MVVM模式的時(shí)候,前臺(tái)View和后臺(tái)ViewModel的交互就是通過綁定來實(shí)現(xiàn)的,其中控件觸發(fā)事件的綁定有幾種情況: 

第一種,控件繼承自ButtonBase、MenuItem類,比如:Button、RadioButton、Hyperlink、MenuItem……這種情況下,由于Prism已經(jīng)幫我們實(shí)現(xiàn)了這些控件的Command屬性,可以直接綁定Command屬性來完成Click事件到ViewModel的綁定:

 
 
 
  1.  

LoginCommand便是ViewModel中的事件處理程序入口,它是一個(gè)實(shí)現(xiàn)了ICommand接口的命令:

 
 
 
  1. private DelegateCommand _loginCommand;  
  2. public ICommand LoginCommand  
  3. {  
  4.     get 
  5.     {  
  6.         if(_loginCommand ==null)  
  7.             _loginCommand = new DelegateCommand(OnLogin);  
  8.         return _loginCommand;  
  9.     }  
  10. }  
  11. private void OnLogin(object obj)  
  12. {  
  13.     // 這里定義要做的動(dòng)作  
  14. 這些控件除了Command屬性外還可定義參數(shù)屬性CommandParameter,用來傳遞參數(shù)給處理函數(shù)。

    第二種,不屬于第一種類型的控件,比如,ListView、ListBox、DropDownList等等大部分沒有Click事件的控件。這時(shí)候,當(dāng)我們要實(shí)現(xiàn)SelectedItemChanged、SelectionChanged等常用事件的時(shí)候,需要通過繼承CommandBehaviorBase來自己定義這些事件,具體做法比較麻煩,有興趣的朋友可以去看Prism的幫助文檔,在第六章“Extending Prism Command Behaviors”這一節(jié)有講述。

    另外,有一種更方便的方法來實(shí)現(xiàn)這些操作,那便是使用Expression Blend附帶的System.Windows.Interactivity.dll文件,它使用interaction trigger和InvokeCommandAction behavior來幫助我們直接綁定控件的事件。要使用這個(gè)DLL,當(dāng)然先是在項(xiàng)目中引入dll文件,這個(gè)文件在安裝完Blend4后會(huì)出現(xiàn)在:

    C:\Program Files\Microsoft SDKs\Expression\Blend\.NETFramework\v4.0\Libraries\System.Windows.Interactivity.dll

    需要注意的是,如果你的View、ViewModel不在啟動(dòng)項(xiàng)目中,記得在啟動(dòng)項(xiàng)目中也引用這個(gè)dll文件,不然會(huì)發(fā)生找不到程序集的錯(cuò)誤。接下來在前臺(tái)View中加入xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"的命名空間引用,這樣就可以使用了:

     
     
     
    1.  
    2.        
    3.            
    4.                
    5.            
    6.        
    7.   

    其中,“EventName”屬性指定了響應(yīng)的事件的全稱,它可以為該控件所有的事件。CommandParameter傳遞參數(shù),這個(gè)是一個(gè)可選屬性,參數(shù)可以是字符串、或者是綁定的其它內(nèi)容。后臺(tái)的ViewModel與第一種情況一樣:

     
     
     
    1. private DelegateCommand _selectedChangedCommand;  
    2.  public ICommand SelectedChangedCommand  
    3.  {  
    4.      get {  
    5.          return _selectedChangedCommand ??  
    6.                      (_selectedChangedCommand = new DelegateCommand(SelectedChangedCommandExcute));  
    7.      }  
    8.  }  
    9.  private void SelectedChangedCommandExcute(TreeView sender)  
    10.  {  
    11.      // 要做的動(dòng)作  
    12.  } 

    Prism是個(gè)非常強(qiáng)大的東東,它使用依賴注入,控制反轉(zhuǎn)容器來幫助我們解決團(tuán)隊(duì)合作的松耦合問題,當(dāng)框架定好后,開發(fā)和修改都有非常好的可操作性,未來我還會(huì)花時(shí)間繼續(xù)學(xué)習(xí)Prsim。

    附上DLL下載:System.Windows.Interactivity

    原文鏈接:http://www.cnblogs.com/lekko/archive/2012/07/25/2608143.html


    網(wǎng)頁名稱:Prism中如何實(shí)現(xiàn)一般路由事件的綁定
    文章出自:http://www.dlmjj.cn/article/cocecid.html