我有下面的可视树,我正试图通过EventToCommand发送一个命令。其视觉效果如下:
<Border Background="Gray" Grid.Row="0" Margin="2" VerticalAlignment="Bottom">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDown">
<cmd:EventToCommand
Command="{Binding ShowVideosCmd}"
PassEventArgsToCommand="True"
CommandParameter="{Binding Videos}">
</cmd:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</Border>当单击附加命令的边框时,我会得到以下弹出错误:
“一个未处理的'System.InvalidCastException‘类型异常发生在GalaSoft.MvmLight.WPF4.dll中。
其他信息:无法将“System.Windows.Input.MouseButtonEventArgs”类型的对象强制转换为“System.Windows.DependencyObject”。“
然后在viemModel中创建我的命令,如下所示:
ShowVideosCmd = new RelayCommand<DependencyObject>(
(dpObj) =>
{
messenger.Default.Send<string>("ShowVideos");
},
(dpObj) => true
);我做错什么了?
发布于 2012-02-01 19:50:45
错误消息是不言而喻的:在您的RelayCommand<DependencyObject>中,您期望命令参数是一个DependencyObject,但是您有一个MouseButtonEventArgs,这是正常的,因为您订阅了MouseDown事件。
当事件触发时,EventToCommand使用以下参数之一执行命令:
RelayCommand<typeOfTheSpecifiedCommandPameter>
CommandParameter的值是而不是 null,则它使用它作为参数,因此命令应该类似于:
PassEventArgsToCommand='true' 和-- CommandParameter的值是null,它使用eventargs作为命令参数。因此,您需要将命令定义为RelayCommand<MouseButtonEventArgs>。
PassEventArgsToCommand='false' 和 CommandParameter是null,则根本不执行命令。H 229f 230注意:
因此,您需要为这两种情况定义不同的命令。需要时,您必须使用RelayCommand<object>并检查参数类型。这就是为什么我认为同时使用PassEventArgsToCommand和CommandParameter是不好的做法。
回到例外情况:
在您的示例中,它接缝CommandParameter="{Binding Videos}"返回null,这就是将MouseButtonEventArgs作为命令参数的原因。
要了解为什么{Binding Videos}为null,可以在运行时检查VS中的输出窗口,查找绑定错误。
https://stackoverflow.com/questions/9101957
复制相似问题