2

我对MvvmlightRelayCommandEventToCommand在 Mvvmlight 中有点困惑。似乎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>

我的理解正确吗?

那么,我们可以RelayCommand直接使用 with EventTrigger,而不需要使用EventToCommand吗?

谢谢你的帮助!

4

2 回答 2

4

EventToCommand是一种自定义行为。它首先由Expression blend团队提供,现在是WPF 4的一部分。如果您不使用 WPF4。您需要从这里获得 Blend SDK 。

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

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

No.RelayCommand是避免代码冗余以定义自定义命令的快捷方式。它扩展ICommand了可以为Execute(T)和附加的委托CanExecute(T)。它类似于DelegateCommandPrism 库。

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

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

于 2013-01-02T04:20:15.807 回答
1

感谢 Tilak 的有用回答。

根据 Tilak 的解释,我确实搞砸了,比如将绑定放在事件处理程序中(例如Button GotFocus="{Binding DoJob}")-> 构建失败,发现像这样的事件处理程序不支持绑定。我们只能在Command中进行绑定(比如Button Command="{Binding DoJob}" />,这种情况下会调用默认事件,有button的话应该是Click事件)。做一些愚蠢的事情会帮助我更多地了解生活 - LOL

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

实际上,我打算不使用 EventToCommand,我找到了解决方案:改用 InvokeCommandAction(属于 System.Windows.Interactivity - Mvvm-light 也指此程序集)。

于 2013-01-02T08:27:57.490 回答