没有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.Interactivity
和EventToCommand
)。然而,主应用程序的上一个版本包含System.Windows.Interactivity
的旧版本(到目前为止,它根本没有包含在内),不支持此功能 - 这意味着使用旧的
Interactivity.dll
将导致我们的插件不起作用。但是,用我们需要的新版本覆盖dll会导致主应用程序的某些部分出现问题 - 我读到在一个项目中使用同一dll的两个不同版本(例如这里),但这似乎很复杂。由于我们使用这种构造的地方很少,所以我认为用不使用
Interactivity.dll
的代码替换它可能会更容易
如果切换到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>