我想用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。
我只想获得事件参数
答案 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 question和this old blog post。