我对Mvvmlight中的RelayCommand和EventToCommand有点困惑。似乎是EventToCommand处理EventTrigger并调用RelayCommand来完成工作。例如:
<i:Interaction.Triggers>
<i:EventTrigger x:Uid="i:EventTrigger_1" EventName="MouseLeftButtonUp">
<cmd:EventToCommand x:Uid="cmd:EventToCommand_1" Command="{Binding Form_MouseLeftButtonUpCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
</i:Interaction.Triggers>我的理解正确吗?
那么,我们是否可以直接在EventTrigger中使用RelayCommand,而不需要使用EventToCommand
谢谢你的帮忙!
发布于 2013-01-02 12:20:16
EventToCommand是一个custom behavior。它最初是由Expression blend团队提供的,现在是WPF 4的一部分。如果你没有使用WPF4的话。您需要来自here的Blend SDK。
Behaviors将功能封装为可重用的组件。默认情况下,当功能不存在时,将使用这些选项。例如,为标签、组合框等添加命令支持。
我们可以在EventTrigger中直接使用RelayCommand吗,不需要使用EventToCommand?
不是的。RelayCommand是一种避免代码冗余的快捷方式,用于定义自定义的commands.It扩展ICommand,可以为Execute(T)和CanExecute(T)附加其委托。它类似于棱镜库的DelegateCommand。
<cmd:EventToCommand x:Uid="cmd:EventToCommand_1" Command="{Binding Form_MouseLeftButtonUpCommand}" PassEventArgsToCommand="True"/>在上面的代码行中,cmd:EventToCommand是底层控件的附加功能。Form_MouseLeftButtonUpCommand是它执行的Command。此命令可以封装为RelayCommand。
发布于 2013-01-02 16:27:57
感谢Tilak的有用答案。
根据Tilak的解释,我确实搞砸了,就像在事件处理程序(如按钮GotFocus="{Binding DoJob}")中放入绑定一样-->构建失败,并发现像这样的事件处理程序不支持绑定。我们只能在中绑定(如Click Command="{Binding DoJob}" />,默认事件在这种情况下会被调用,使用button时,应该是点击事件)。做一些愚蠢的事情会帮助我更好的理解生活--哈哈
我们可以直接在EventTrigger中使用RelayCommand吗,不需要使用EventToCommand?
实际上,我不打算使用EventToCommand,我找到了解决方案:使用InvokeCommandAction (属于System.Windows.Interactivity - Mvvm-light也指这个程序集)。
https://stackoverflow.com/questions/14116734
复制相似问题