在MVVM中绑定事件并将事件参数作为命令参数传递

时间:2016-10-18 09:41:00

标签: c# .net wpf mvvm

我想用ViewModel绑定一个事件。

我用过

  

CLR名称空间:System.Windows.Interactivity;装配= System.Windows.Interactivity

我用了相同的触发器

  <Canvas Grid.Row="2" Grid.Column="2" x:Name="InteractiveCanvas" Style="{StaticResource canvasChartStyle}" ClipToBounds="True" >
        <intr:Interaction.Triggers>
            <intr:EventTrigger EventName="MouseEnter">
                <intr:InvokeCommandAction Command="AppointmentEditing" />
            </intr:EventTrigger>
        </intr:Interaction.Triggers>
    </Canvas>

但我需要使用事件参数。这里无法得到相同的结果。

在wpf中,是否存在绑定事件和获取事件参数的可能性?随着MVVM精简版或PRISM。

我只想获得事件参数

3 个答案:

答案 0 :(得分:3)

您可以通过添加DLL来实现:

  • System.Windows.Interactivitiy
  • Microsoft.Expression.Interactions

在您的XAML中:

使用CallMethodAction类。

使用EventName来调用您想要的活动;然后在Method

中指定您的MethodName名称
<Window>
    xmlns:wi="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
    xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions">

    <wi:Interaction.Triggers>
        <wi:EventTrigger EventName="SelectionChanged">
            <ei:CallMethodAction
                TargetObject="{Binding}"
                MethodName="ShowCustomer"/>
        </wi:EventTrigger>
    </wi:Interaction.Triggers>
</Window>

在您的ViewModel代码中:

public void ShowCustomer()
//The method must be public & can take 0 parameters or 2 parameters i.e.
//object sender & EventArgs args
{
    // Do something.
}
P.S:这是对这个问题的真正迟到的回应,但我希望它可以帮助你。

答案 1 :(得分:1)

应该使用CommandParameter ..全部:)

<Canvas Grid.Row="2" Grid.Column="2" x:Name="InteractiveCanvas" Style="{StaticResource canvasChartStyle}" ClipToBounds="True" >
        <intr:Interaction.Triggers>
            <intr:EventTrigger EventName="MouseEnter">
                <intr:InvokeCommandAction Command="{Binding AppointmentEditing}" CommandParameter="YourParameters" />
            </intr:EventTrigger>
        </intr:Interaction.Triggers>
    </Canvas>

答案 2 :(得分:0)

看一下MVVM-Light框架。它们的EventToCommand实现包括一个PassEventArgsToCommand选项。

有关详细信息,请参阅Laurent Bugnion的this questionthis old blog post