使用 Wpf 和 MVVM。我有一个主窗口,其中碰巧有一个 Actipro Docksite(尽管我相信这个问题的整体背景可能无关紧要)。码头站点有一个我希望处理的 WindowClosing 事件,但在这种特殊情况下,我确实需要访问与该事件相关的事件参数。
现在,当我在 WPF 和 MVVM 的陡峭学习曲线中跌跌撞撞时,我发现我可以使用交互来处理这样的事件;
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding Path=RegisterDocksiteCommand}" CommandParameter="{Binding ElementName=FtpDocksite}"/>
</i:EventTrigger>
<!-- <i:EventTrigger EventName="WindowClosing">
<i:InvokeCommandAction Command="{Binding Path=DockingWindowClosingCommand}" />
</i:EventTrigger> -->
</i:Interaction.Triggers>
但问题在于,虽然我可以通过交互捕获 windowClosing 事件,但我看不到如何将事件 args 作为命令参数传递。我知道我可以在后面的代码中处理这个问题,但是我会陷入各种各样的痛苦,试图将 evet agrs(或者至少是我想要 bavk 的特定事件 arg 传递给视图模型。
所以我做了一些研究,偶然发现了 EventManager 并决定尝试用它做一个实验。
在我的主窗口视图模型的构造函数中,我添加了以下内容;
EventManager.RegisterClassHandler(GetType(Docksite),DockSite.WindowClosingEvent,New RoutedEventHandler(AddressOf OnDockSiteWindowClosing))
再往下
Private Sub OnDockSiteWindowClosing(ByVal sender As Object, ByVal e As DockingWindowEventArgs)
Select Case e.Window.Name
Case "SchedulerViewWindow"
SchedulerContextualTabIsVisible = False
scheduler = Nothing
Case Else
Exit Select
End Select
End Sub
令我高兴的是,这证明是有效的,但前提是我为视图模型文件关闭 Option Strict。有什么方法可以使用 EventManager 而无需关闭选项 Strict?
编辑:
我得到的错误信息是;Option Strict On 不允许缩小方法 'Private Sub OnDockSiteWindowClosing(sender As Object, e As ActiproSoftware.Windows.Controls.Docking.DockingWindowEventArgs)' 和委托 'Delegate Sub RoutedEventHandler(sender As Object, e As System.) 之间的隐式类型转换。 Windows.RoutedEventArgs)'
谢谢