WPF MVVM将事件参数传递给视图模型

时间:2013-08-07 08:47:22

标签: wpf mvvm event-handling mouseevent parameter-passing

我有网格控件,我需要传递MouseWheel事件来查看模型。

现在我正在这样做

    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseWheel">
            <i:InvokeCommandAction Command="{Binding MouseWheelCommand}"  />
        </i:EventTrigger>

    </i:Interaction.Triggers>

但我需要在鼠标向上滚动和鼠标向下滚动时执行不同的操作。 怎么做?

我可以在没有代码的情况下执行此操作并且没有外部库吗?我正在使用c#,wpf,visual studio 2010 express。

2 个答案:

答案 0 :(得分:0)

为此,您需要MVVM中的MouseWheelEventArgs。所以将此EventArgs传递给commandParamter。 你可以参考这个链接--- Passing EventArgs as CommandParameter

然后在你的View-Model Class中你可以使用这个事件args如下

 void Scroll_MouseWheel(MouseWheelEventArgs e)
    {
        if (e.Delta > 0)
        {
           // Mouse Wheel Up Action
        }
        else
        {
           // Mouse Wheel Down Action
        }

        e.Handled = true;
    }

答案 1 :(得分:0)

您可以将输入绑定与自定义鼠标手势结合使用,这很容易实现:

public class MouseWheelUp : MouseGesture
{
    public MouseWheelUp(): base(MouseAction.WheelClick)
    {
    }

    public MouseWheelUp(ModifierKeys modifiers) : base(MouseAction.WheelClick, modifiers)
    {
    }    

    public override bool Matches(object targetElement, InputEventArgs inputEventArgs)
    {
      if (!base.Matches(targetElement, inputEventArgs)) return false;
      if (!(inputEventArgs is MouseWheelEventArgs)) return false;
      var args = (MouseWheelEventArgs)inputEventArgs;
      return args.Delta > 0;       
    }
}

然后像这样使用它:

<TextBlock>
        <TextBlock.InputBindings>

            <MouseBinding Command="{Binding Command}">
                <MouseBinding.Gesture>
                    <me:MouseWheelUp />
                </MouseBinding.Gesture>
            </MouseBinding>

        </TextBlock.InputBindings>
        ABCEFG
 </TextBlock>