日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

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

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

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

 
 
 
  1.  

LoginCommand便是ViewModel中的事件處理程序入口,它是一個實現(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.     // 這里定義要做的動作  
  14. 這些控件除了Command屬性外還可定義參數(shù)屬性CommandParameter,用來傳遞參數(shù)給處理函數(shù)。

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

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

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

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

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

    其中,“EventName”屬性指定了響應的事件的全稱,它可以為該控件所有的事件。CommandParameter傳遞參數(shù),這個是一個可選屬性,參數(shù)可以是字符串、或者是綁定的其它內容。后臺的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.      // 要做的動作  
    12.  } 

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

    附上DLL下載:System.Windows.Interactivity

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


    網(wǎng)頁名稱:Prism中如何實現(xiàn)一般路由事件的綁定
    標題URL:http://www.5511xx.com/article/cocecid.html