0

使用 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)'

谢谢

4

0 回答 0