MVVM模式中事件响应的一种方式

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,否则提示找不到函数。

原文地址:https://www.cnblogs.com/wenjingu/p/2231429.html