在WPF中单纯的命令绑定往往不能满足覆盖所有的事件,例如ComboBox的SelectionChanged事件,DataGrid的SelectionChanged事件等等,这时就可以用事件绑定来完成。
事件绑定需要用到:
System.Windows. interactivity.dll
库,
如果安装了Blend for visual studio,里面就包含了这个dll,在
Interaction.Triggers里面添加一个或多个EventTrigger并指定关注的的事件名称,在EventTrigger中通过InvokeCommandAction来绑定事件对应的命令。
代码如下:
<ComboBox Grid.Column="3" Width="90"
SelectedItem="{Binding SelectConfirmStatus, Mode=TwoWay}" ItemsSource="{Binding ConfirmStatus, Mode=OneWay}" SelectedValuePath="ID"
DisplayMemberPath="StatusName" Height="40" Foreground="Black"
HorizontalContentAlignment="Left" VerticalContentAlignment="Center"
HorizontalAlignment="Right" VerticalAlignment="Center" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ConfirmStatusCommand}">
</i:InvokeCommandAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ComboBox>
View Code
同时需要引入命名空间,如下:
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
View Code
然后再ViewModel中实现该命令即可,如:
public RelayCommand<object> ConfirmStatusCommand { private set; get; }
在类的构造函数中实现该命令属性:
ConfirmStatusCommand = new RelayCommand<object>(args =>
CheckAllotOrders();//此为命令执行的方法
View Code
整体就这样,供参考,但此方法也有局限,就是不能把动态的命令参数(如键盘按键事件,获取按的键值参数)传入ViewModel,如需传参数,还得实现一个参数类。
随手记之,积滴水,汇汪洋。