Prism InvokeCommandAction 可以与 Microsoft.Xaml.Behaviors.Wpf 一起使用吗

Can Prism InvokeCommandAction be used with Microsoft.Xaml.Behaviors.Wpf

我遇到了这个错误

'InvokeCommandAction' cannot be added to a collection or dictionary of type 'TriggerActionCollection'

Xaml 文件如下

xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:prismI="clr-namespace:Prism.Interactivity;assembly=Prism.Wpf"
<i:Interaction.Triggers>
    <i:EventTrigger  EventName="PreviewKeyDown">
        <prismI:InvokeCommandAction Command="{Binding testCmd}"/> ==> this line was error
    </i:EventTrigger>
</i:Interaction.Triggers>

NuGet 安装包:

我不想使用 MVVMLight 并自己编写 behaviour 以在 i:Interaction.Behavious

中使用

Prism 7.2.0.1422 带来了它自己的(旧)版本的 XAML 行为,而您正在混合使用新的 nuget 包和旧版本,这可能是问题所在。你试过使用

<i:InvokeCommandAction Command="{Binding testCmd}"/> 

因此将 prismI 替换为 i?

Prism 的 interactitvity 命名空间中的类型基于 System.Windows.Interactivity 程序集。它随 Blend for Visual Studio 一起提供。如果你安装它,你可以在下面的路径中找到程序集。 Prism 不包含这些组件,它只提供基于它的类型。

C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries\System.Windows.Interactivity.dll

您也可以安装 NuGet 包 System.Windows.Interactivity.WPF,但是这个包不是官方的,所以我不推荐它.

要使用 XAML 中的旧程序集,只需将命名空间声明替换为这个。

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"

Microsoft.Xaml.Behaviors.Wpf 包是 2018 年 12 月发布的开源变体。由于它附带具有不同命名空间的不同程序集,因此它与基于的类型不兼容Blend SDK 程序集。

好消息是,Prism 8 也将使用较新的软件包。