2013-04-12 52 views
0

我試圖改變我當前的代碼,並將其移向MVVM設計。EventToCommand從來沒有爲我工作

我有一個網格控制爲這樣:

 <ctl:GridContainer x:Name="GridResponses" CellValueChanged="GridResponses_CellValueChanged"> 
      . 
      . 
      . 
     </ctl:GridContainer> 

具有偶數這樣:

 Private Sub GridResponses_CellValueChanged(sender As Object, e As CellValueEventArgs) 
      If e.Column.FieldName = "PRIORITY" Then 
       . 
       . 
       . 
      End If 
     End Sub 

現在我移動上面的代碼使用MVVM光與執行以下操作:

 <ctl:GridContainer DataContext="{Binding ResponsesDataView}"> 
      <i:Interaction.Triggers> 
       <i:EventTrigger EventName="CellValueChanged"> 
        <cmd:EventToCommand Command="{Binding GridCellValueChangedCommand}"/> 
       </i:EventTrigger> 
      </i:Interaction.Triggers> 
     </ctl:GridContainer> 

,並在我的ViewModel我有以下RelayCommand聲明如下:

 Private m_cmdGridCellValueChanged As RelayCommand(Of CellValueEventArgs) 

     . 
     . 
     . 

     m_cmdGridCellValueChanged = New RelayCommand(Of CellValueEventArgs) _ 
       (Sub(e) 
        If e.Column.FieldName = "PRIORITY" Then 
         . 
         . 
         . 
        End If 
       End Sub) 

它永遠不會執行!我甚至嘗試使用無參數的RelayCommand,並試圖顯示一個MessageBox,並沒有事件的工作。

EventToCommand是否受特定事件限制?難道我做錯了什麼???

+0

什麼是GridContainer? – Phil

+0

我自己的用戶控件,其中包含一個DevExpress DXGrid。 – user2170838

回答

1

其實問題在於綁定。您正在搜索ResponsesDataView中的命令。你需要遍歷你的View的DataContext -

<cmd:EventToCommand Command="{Binding DataContext.GridCellValueChangedCommand, 
        RelativeSource={RelativeSource FindAncestor, 
             AncestorType=UserControl}}"/> 
+0

呵呵,我什至沒有想到!好吧,我會做出我的改變並回報,我真的希望它能解決問題:) – user2170838

+2

檢查你的輸出窗口。如果你的命令名在那裏,那麼你的綁定不會被解析。就那麼簡單..!! –

+1

它的工作!謝謝Rohit :) – user2170838