2013-03-14 110 views
0

我有一个使用DevExpress控件和MVVM与PRISM的WPF应用程序。
我使用DockLayoutManager的“DockOperationCompleted”事件对我这样的视图模型调用命令:WPF MVVM事件命令 - 基于事件参数调用命令

<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项目逐一关闭,因此'SaveLayoutCommand'被调用用于每个封闭的Dock项目,我不希望发生这种情况。
与该事件被提出的“DockOperationCompletedEventArgs”有“DockOperation”属性,我可以检查agains,但我不知道确切位置应该将此代码格格不入。
我想实现的是,应该只在一种情况下调用该命令 - 当物品停靠时
我的问题是:当根据事件的事件参数调用命令时,有没有一种方法可以“过滤”?

感谢 :)

回答

1

还有就是要筛选调用动作之前引发的事件没有内建的方法。但是,您可以实施自己的自定义触发器操作来完成过滤。

不幸的是,访问事件参数并将它们传递给命令也并不容易。看到这个问题作为参考:

MVVM Passing EventArgs As Command Parameter

+0

感谢您的快速回答@azeze :) – rinat 2013-03-14 16:00:02

3

除了aKzenTs回答我想指出的是,与DevExpress的它相当容易的事件参数传递给命令。

您应该从MVVM库(PassEventArgsToCommand-Property)使用EventToCommand。如果你想保持你的视图模型清洁DevExpress,你可以额外使用一个转换器将事件参数转换为任意对象。

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