zoukankan      html  css  js  c++  java
  • 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,否则提示找不到函数。

  • 相关阅读:
    LR三:post接口_ajax上传
    LR二:post接口_form表单上传
    Dijkstra优先队列优化
    Misha and Changing Handles
    HDU-1428(记忆化搜索)
    CF-599B
    POJ-1488(字符串应用)
    New Year Permutation(Floyd+并查集)
    HDU-1078
    HDU-5532(LIS-nlogn)
  • 原文地址:https://www.cnblogs.com/wenjingu/p/2231429.html
Copyright © 2011-2022 走看看