我有一个WPF应用程序,它使用DevExpress控件和MVVM与PRISM。
我正在使用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'命令的目的是保存布局,以便以后可以恢复。
DockItem停靠或关闭后会引发'DockOperationCompleted'事件(还有其他情况,但它们无关紧要)。
问题是,当我关闭主窗口时,我的DockLayoutManager中的停靠项逐个关闭,因此每个已关闭的停靠项都会调用“SaveLayoutCommand”,我不希望这种情况发生。
引发事件的'DockOperationCompletedEventArgs'有一个'DockOperation'属性,我可以再次检查,但我不确定这个代码到底应该在哪里。
我想要实现的是,只有在一种情况下 - 当项目停靠时,才应该调用该命令
我的问题是:根据事件的事件参数调用命令时,有没有办法“过滤”?
谢谢:)
答案 0 :(得分:3)
除了aKzenTs的答案,我想指出,使用DevExpress很容易将事件args传递给命令。
您应该使用其MVVM库中的EventToCommand(PassEventArgsToCommand-Property)。如果你想让你的viewmodel保持清洁DevExpress,你还可以使用Converter将事件args转换为任意对象。
<dxmvvm:Interaction.Triggers>
<dxmvvm:EventToCommand Command="{Binding YOURCOMMAND}"
EventName="THEEVENT"
EventArgsConverter="{StaticResource YOUREVENTARGSCONVERTER}"
PassEventArgsToCommand="true" />
</dxmvvm:Interaction.Triggers>
答案 1 :(得分:1)
在调用操作之前,没有内置方法可以过滤引发的事件。但是,您可以实现自己的自定义触发器操作来执行过滤。
不幸的是,访问事件args并将它们传递给命令也不容易。请参阅此问题作为参考: