2013-01-02 68 views
2

我对Mvvlight的RelayCommandEventToCommand有点困惑。 看来EventToCommand处理EventTrigger并呼吁RelayCommand做工作。 如:RelayCommand vs EventToCommand

<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> 

我的理解是否正确?

那么,我们可以直接使用RelayCommandEventTrigger,不需要使用EventToCommand

感谢您的帮助!

回答

4

EventToCommandcustom behavior。它首先由Expression blend团队提供,现在是WPF 4的一部分。如果你不使用WPF4。你需要here的Blend SDK。

行为将功能封装为可重用组件。这些功能默认情况下不存在时使用。例如,添加命令支持标签,组合框等。

我们可以直接使用RelayCommand与EventTrigger,不需要使用EventToCommand吗?

RelayCommand是快捷方式,以避免代码redudnency定义自定义commands.It延伸ICommand其代表可以连着Execute(T)CanExecute(T)。这与Prism库的DelegateCommand类似。

<cmd:EventToCommand x:Uid="cmd:EventToCommand_1" Command="{Binding Form_MouseLeftButtonUpCommand}" PassEventArgsToCommand="True"/> 

在上面的行cmd:EventToCommand是基础控制的附加功能。它执行的是Form_MouseLeftButtonUpCommandCommand。该命令可以封装为RelayCommand

1

感谢蒂拉克你的有用答案。

与提拉克的解释,我也乱像投入事件处理程序绑定(如按钮的GotFocus =“{结合DoJob}”) - >构建失败,发现事件处理程序这样做不支持绑定。我们只能绑定在命令中(如Button Command =“{Binding DoJob}” />并且在这种情况下调用默认事件,使用按钮,它应该是Click事件)。 做一些愚蠢会帮助我了解更多的生活 - LOL

我们可以使用RelayCommand与EventTrigger直接,无需使用 EventToCommand?

事实上,我打算不要使用EventToCommand,我发现对于该解决方案:使用InvokeCommandAction代替(属于System.Windows.Interactivity - MVVM光也指该组件)。