MVVM模式中的事件的响应一般有以下几种方式:直接绑定到命令、使用依赖属性、使用Blend自带的两个库(System.Windows.Interactivity.dll和Microsoft.Expression.Interactions.dll)。其中直接绑定到命令的方式只有在部分场景中可用,如Button的click事件;使用依赖属性的方式在之前的
一篇文章中已讲过(http://www.cnblogs.com/wenjingu/archive/2011/04/12/2013608.html),这种方法较通用,但过于臃肿,而第三种方法则
简明的多。具体使用方法如下(以ListView 的SelectionChanged事件为例):
在View中:
<ListView Name="lvListView" Grid.Row="0" Margin="4"
SelectionMode="Single"
ItemsSource="{Binding Path=***}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<ei:CallMethodAction MethodName="SelectionChanged" TargetObject="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
<ListView.View>
</ListView.View>
</ListView>
解释一下,其中:
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ei=http://schemas.microsoft.com/expression/2010/interactions
EventName:要响应的ListView 的事件名称,此处为SelectionChanged
MethodName="SelectionChanged":表示ViewModel中响应该事件的函数名
TargetObject="{Binding}" :表示MethodName对应的函数在DataContext中
另外,上述两个命名空间应在应用程序项目中引用,否则会报“未找到程序集名称”错误。
后台使用该事件委托的默认参数就可以获取到这些参数的值。如下:
在ViewModel中:
public void SelectionChanged(object sender, SelectionChangedEventArgs e)
{
…
}
注意:函数必须是Public,否则提示找不到函数。