0

我正在尝试更改我当前的代码并将其移向 MVVM 设计。

我有一个这样的网格控件:

        <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 Light 并执行以下操作:

        <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 在特定事件方面是否受到限制?难道我做错了什么???

4

1 回答 1

1

其实问题出在绑定上。您正在搜索中的命令ResponsesDataView。你需要遍历你的视图的 DataContext -

 <cmd:EventToCommand Command="{Binding DataContext.GridCellValueChangedCommand, 
                     RelativeSource={RelativeSource FindAncestor, 
                                         AncestorType=UserControl}}"/>
于 2013-04-13T07:34:57.930 回答