C# WPF MVVM事件到命令-基于事件参数调用命令

C# WPF MVVM事件到命令-基于事件参数调用命令,c#,wpf,mvvm,devexpress,prism,C#,Wpf,Mvvm,Devexpress,Prism,我有一个WPF应用程序,它使用DevExpress控件和带PRISM的MVVM。 我正在使用DockLayoutManager的“DockOperationCompleted”事件调用视图模型上的命令,如下所示: <dxd:DockLayoutManager x:Name="dockContainer"> <i:Interaction.Triggers> <i:EventTrigger EventName="Dock

我有一个WPF应用程序,它使用DevExpress控件和带PRISM的MVVM。
我正在使用DockLayoutManager的“DockOperationCompleted”事件调用视图模型上的命令,如下所示:

    <dxd:DockLayoutManager x:Name="dockContainer">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="DockOperationCompleted">
                <i:InvokeCommandAction Command="{Binding DataContext.SaveLayoutCommand, ElementName=dockContainer}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <dxd:LayoutGroup/>
    </dxd:DockLayoutManager>

“SaveLayoutCommand”命令的目的是保存布局,以便稍后可以恢复。
“DockOperationCompleted”事件是在DockItem停靠或关闭后引发的(还有其他情况,但它们并不相关)。
问题是,当我关闭主窗口时,DockLayoutManager中的dock项会一个接一个地关闭,因此每个关闭的dock项都会调用“SaveLayoutCommand”,我不希望发生这种情况。
引发事件的“DockOperationCompletedEventArgs”有一个“DockOperation”属性,我可以再次检查该属性,但我不确定该代码应该放在哪里。
我试图实现的是,该命令只应在一种情况下调用—当项目停靠时
我的问题是:当根据事件的事件参数调用命令时,是否有方法进行“筛选”


谢谢:)

在调用操作之前,没有内置的方法来过滤引发的事件。但是,您可以实现自己的自定义触发器操作来执行过滤

不幸的是,访问事件参数并将其传递给命令也不容易。请将此问题作为参考:


在调用操作之前,没有内置的方法来过滤引发的事件。但是,您可以实现自己的自定义触发器操作来执行过滤

不幸的是,访问事件参数并将其传递给命令也不容易。请将此问题作为参考:


除了aKzenTs答案之外,我想指出,使用DevExpress将事件参数传递给命令相当容易

您应该使用MVVM库中的EventToCommand(PassEventArgsToCommand属性)。如果希望保持viewmodel中没有DevXPress,还可以使用转换器将事件参数转换为任意对象

<dxmvvm:Interaction.Triggers>
    <dxmvvm:EventToCommand Command="{Binding YOURCOMMAND}"
                           EventName="THEEVENT"
                           EventArgsConverter="{StaticResource YOUREVENTARGSCONVERTER}"
                           PassEventArgsToCommand="true" />
</dxmvvm:Interaction.Triggers>

除了aKzenTs答案之外,我想指出,使用DevExpress将事件参数传递给命令相当容易

您应该使用MVVM库中的EventToCommand(PassEventArgsToCommand属性)。如果希望保持viewmodel中没有DevXPress,还可以使用转换器将事件参数转换为任意对象

<dxmvvm:Interaction.Triggers>
    <dxmvvm:EventToCommand Command="{Binding YOURCOMMAND}"
                           EventName="THEEVENT"
                           EventArgsConverter="{StaticResource YOUREVENTARGSCONVERTER}"
                           PassEventArgsToCommand="true" />
</dxmvvm:Interaction.Triggers>


感谢您的快速回答@aKzent:)感谢您的快速回答@aKzent:)