EventToCommand 不能添加到 TriggerActionCollection
EventToCommand cannot be added to TriggerActionCollection
我正在使用 MVVM Light 开发 WPF 项目并尝试使用 EventToCommand
,但我收到一条错误消息:
A value of type 'EventToCommand' cannot be added to a collection or dictionary of type 'TriggerActionCollection'."
我正在使用 .NET Framework 4.7.2 和 NuGet 库 Microsoft.Xaml.Behaviors.Wpf。
我看到大多数地方都在谈论 http://schemas.microsoft.com/expression/2010/interactivity
,
但据我所知,这现在已被弃用,应该使用 http://schemas.microsoft.com/xaml/behaviors
代替。
在 mvvmlight.net 的更新日志中我发现了这个:
EventToCommand -
BL0004.005, The type 'EventToCommand' from assembly 'GalaSoft.MvvmLight.Extras.WPF4' is built with an older version of the Blend SDK, and is not supported in a Windows Presentation Framework 4 project.
我试过更改项目的目标框架版本,但似乎没有什么不同。
如有任何帮助,我们将不胜感激。
<UserControl x:Class="DialogueTree.View.DialogueControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:DialogueTree.View"
xmlns:command="http://www.galasoft.ch/mvvmlight"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="200"
MinHeight="200" MinWidth="200">
<TextBox Text="{Binding Headline}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<command:EventToCommand Command="{Binding Source={StaticResource Locator}, Path=DialogueControlVM.EndEditHeadline}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
来自 MvvmLight 的 EventToCommand
操作基于旧版 Blend SDK 程序集。
- XML 命名空间
http://schemas.microsoft.com/expression/2010/interactivity
- CLR 命名空间
System.Windows.Interactivity
这些实际上 已弃用 并被您使用的开源 XAML 行为所取代。问题是这些程序集不兼容,因此您不能将 MvvmLight 提供的操作与 XAML 行为一起使用,反之亦然。我想 MvvmLight 将来也会更新以使用这些行为。 Here is an open issue 关于这个主题。
但是,您不需要 EventToCommand
,因为 XAML 行为包已经包含一个执行相同操作的命令:InvokeCommandAction
。不过,属性 名称可能不同。
<b:EventTrigger EventName="LostFocus">
<b:InvokeCommandAction Command="{Binding Source={StaticResource Locator}, Path=DialogueControlVM.EndEditHeadline}"
CommandParameter="{Binding}"/>
</b:EventTrigger>
我正在使用 MVVM Light 开发 WPF 项目并尝试使用 EventToCommand
,但我收到一条错误消息:
A value of type 'EventToCommand' cannot be added to a collection or dictionary of type 'TriggerActionCollection'."
我正在使用 .NET Framework 4.7.2 和 NuGet 库 Microsoft.Xaml.Behaviors.Wpf。
我看到大多数地方都在谈论 http://schemas.microsoft.com/expression/2010/interactivity
,
但据我所知,这现在已被弃用,应该使用 http://schemas.microsoft.com/xaml/behaviors
代替。
在 mvvmlight.net 的更新日志中我发现了这个:
EventToCommand - BL0004.005, The type 'EventToCommand' from assembly 'GalaSoft.MvvmLight.Extras.WPF4' is built with an older version of the Blend SDK, and is not supported in a Windows Presentation Framework 4 project.
我试过更改项目的目标框架版本,但似乎没有什么不同。
如有任何帮助,我们将不胜感激。
<UserControl x:Class="DialogueTree.View.DialogueControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="http://schemas.microsoft.com/xaml/behaviors"
xmlns:local="clr-namespace:DialogueTree.View"
xmlns:command="http://www.galasoft.ch/mvvmlight"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="200"
MinHeight="200" MinWidth="200">
<TextBox Text="{Binding Headline}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="LostFocus">
<command:EventToCommand Command="{Binding Source={StaticResource Locator}, Path=DialogueControlVM.EndEditHeadline}"
CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</TextBox>
来自 MvvmLight 的 EventToCommand
操作基于旧版 Blend SDK 程序集。
- XML 命名空间
http://schemas.microsoft.com/expression/2010/interactivity
- CLR 命名空间
System.Windows.Interactivity
这些实际上 已弃用 并被您使用的开源 XAML 行为所取代。问题是这些程序集不兼容,因此您不能将 MvvmLight 提供的操作与 XAML 行为一起使用,反之亦然。我想 MvvmLight 将来也会更新以使用这些行为。 Here is an open issue 关于这个主题。
但是,您不需要 EventToCommand
,因为 XAML 行为包已经包含一个执行相同操作的命令:InvokeCommandAction
。不过,属性 名称可能不同。
<b:EventTrigger EventName="LostFocus">
<b:InvokeCommandAction Command="{Binding Source={StaticResource Locator}, Path=DialogueControlVM.EndEditHeadline}"
CommandParameter="{Binding}"/>
</b:EventTrigger>