【问题标题】:Getting EventArgs when using interaction triggers使用交互触发器时获取 EventArgs
【发布时间】:2012-11-16 18:12:23
【问题描述】:

我正在使用这种方式从 XAML 中捕获事件:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="MouseWheel">
        <ei:CallMethodAction MethodName="ChangeValue" TargetObject="{Binding DataContext}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

这种方式效果很好,我可以在我的代码中触发我的ChangeValue 函数。 但我想知道ChangeValue 函数上的鼠标滚轮方向(向上或向下)。 有没有办法做到这一点?

【问题讨论】:

    标签: wpf xaml mousewheel interaction eventtrigger


    【解决方案1】:

    您可以使用MVVM LightEventToCommand,它也有PassEventArgsToCommand 属性。然后,代替方法,定义一个接收事件 args 作为参数的命令。您的 XAML 应如下所示:

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseWheel">
            <cmd:EventToCommand Command="{Binding ChangeValueCommand}"
                                PassEventArgsToCommand="True" />
        </i:EventTrigger>
    </i:Interaction.Triggers>
    

    【讨论】:

    • 感谢您的帮助。那么唯一的办法就是使用第三个库?
    • 这是最简单的方法。您不必使用整个 MVVM Light 库 - 您可以浏览其源代码并只使用 EventToCommand 类。
    • 谢谢。而且只有这个类,你知道如何将事件发送到我的数据上下文吗?
    • 您应该在数据上下文中定义ChangeValueCommand 命令,并像任何其他绑定一样对其进行绑定。
    【解决方案2】:

    我已经使用了这里描述的技术:

    http://blog.roboblob.com/2010/01/26/binding-ui-events-from-view-to-commands-in-viewmodel-in-silverlight-4/

    那里的博文非常清晰易懂,特别是如果您已经有一些 WPF/Silverlight 经验的话。我在实现这个版本的 Event->Command 模式时没有遇到任何问题。

    此功能也可“内置”到 MVVMLight 等框架中。

    本质上,您为要使用的每个事件创建一个命令 (ICommand)。

    【讨论】:

      猜你喜欢
      • 2022-08-19
      • 2012-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多