没有Interactivity.dll:MVVMLight的替代方案';s EventToCommand

本文关键字:方案 EventToCommand dll Interactivity MVVMLight 没有 | 更新日期: 2023-09-27 18:29:04

在我们当前的C#项目中,我们使用MVVM light框架及其EventToCommand功能将事件绑定到命令(如本SO线程中所述)。我们使用它的例子如下:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="GotFocus">
        <cmd:EventToCommand CommandParameter="{Binding SelectedItem, ElementName=SelectTree}"
                            Command="{Binding Path=SelectTreeGotFocusCommand, Mode=OneWay}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

我的问题是:在不使用System.Windows.Interactivity的情况下,实现相同行为(即EventToCommand,不限于GotFocus)的最简单方法是什么?

为了避免XY问题,这里有一些背景:

  • 我们正在为一个已经存在的主要应用程序开发一个插件,对此我们没有任何影响。我们的插件被用作这个主要应用程序使用的dll
  • 到目前为止,我们使用了上面给出的XAML代码(即使用System.Windows.InteractivityEventToCommand)。然而,主应用程序的上一个版本包含System.Windows.Interactivity的旧版本(到目前为止,它根本没有包含在内),不支持此功能
  • 这意味着使用旧的Interactivity.dll将导致我们的插件不起作用。但是,用我们需要的新版本覆盖dll会导致主应用程序的某些部分出现问题
  • 我读到在一个项目中使用同一dll的两个不同版本(例如这里),但这似乎很复杂。由于我们使用这种构造的地方很少,所以我认为用不使用Interactivity.dll的代码替换它可能会更容易

没有Interactivity.dll:MVVMLight的替代方案';s EventToCommand

如果切换到Microsoft.Xaml.Phaviors.Wpfnuget包并将命名空间声明更改为

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"

你可以这样使用InvokeCommandAction

<i:Interaction.Triggers>
    <i:EventTrigger EventName="GotFocus"}">
        <i:InvokeCommandAction Command="..." CommandParameter="..."/>
    </i:EventTrigger>
</i:Interaction.Triggers>