【问题标题】:RelayCommand vs EventToCommandRelayCommand 与 EventToCommand
【发布时间】:2013-01-02 04:03:10
【问题描述】:

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

我的理解正确吗?

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

感谢您的帮助!

【问题讨论】:

    标签: c# wpf mvvm mvvm-light routed-commands


    【解决方案1】:

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

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

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

    没有。 RelayCommand 是避免代码冗余定义自定义命令的快捷方式。它扩展了 ICommand,其代表可以附加到 Execute(T)CanExecute(T)。类似于 Prism 库的DelegateCommand

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

    上面的cmd:EventToCommand 是底层控件的附加功能。 Form_MouseLeftButtonUpCommand 是它执行的 Command。该命令可以封装为RelayCommand

    【讨论】:

      【解决方案2】:

      感谢 Tilak 的有用回答。

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-23
        • 1970-01-01
        • 1970-01-01
        • 2022-11-30
        • 2016-01-10
        • 2015-10-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多