使用 InvokeCommandAction MVVM 传递参数

passing argument with InvokeCommandAction MVVM

我想根据某些业务逻辑禁用 cell/Column。我正在使用 ShowingEditor 事件和 ShowingEditorEventArgs 来取消它。传递 ShowingEditorEventArgs 将是 excellent.I 我能够将完整的网格作为参数传递。使用下面的代码。但我只想传递 ShowingEditorEventArgs 的选定 cell.May 是一些相关的资源绑定帮助我在这里。

<dxg:GridControl x:Name="grid" >
                <dxg:GridControl.View>
                    <dxg:TableView Name="view"  ShowingEditor="view_ShowingEditor">
                    <i:Interaction.Triggers>

                        <i:EventTrigger EventName="ShowingEditor">
                            <i:InvokeCommandAction Command="{Binding ShowingEditorCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type dxg:GridControl}}}" />

... 注:

  1. 我不能使用 MVVM light(GalaSoft).
  2. 交互没有给我 CallMethodAction。

    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    <ei:CallMethodAction
    
  3. 我不想传递ViewModel的绑定属性(例如SelectedItem

  4. 使用 DevExpress GridControl

考虑使用 DevExpress MVVM 框架,您可以在其中将事件参数作为参数传递给视图模型:

<dxmvvm:Interaction.Behaviors>
    <dxmvvm:EventToCommand EventName="ShowingEditor" Command="{Binding ShowingEditorCommand}" PassEventArgsToCommand="True" />
</dxmvvm:Interaction.Behaviors>

或者甚至在使用 EventArgsConverter 指定的转换器将 EventArgs 对象传递给您的命令之前转换它 属性。

查看 EventToCommand 文章了解更多信息。

P.S。如果您出于某种原因无法使用 DevExpress MVVM 框架,this post 描述了如何实现自定义 TriggerAction 手动将事件参数传递给命令。