2013-03-14 169 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>