zoukankan      html  css  js  c++  java
  • MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)

    今天学习MVVM架构中“事件”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华 的 利刃 MVVMLight 6:命令基础

    1.  在MVVM Light框架中,事件是WPF应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理
    2. 相对于CodeBehind 的方式,使用命令会好很多:最大的特点就是解耦View和ViewModel的行为交互,将视图的显示和业务逻辑分开。
    3. 对View上的某个元素进行命令的绑定,触发点击操作的时候,这个按钮实际完成的是对应ViewModel中的所绑定的方法的执行。

    扩展:

    常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的;
    在MVVMLight框架里,这里我们定义的ViewModel都继承自ViewModelBase,ViewModelBase封装在MvvmLight框架中,它已经实现了INotifyPropertyChanged接口,
    因此我们在定义ViewModel属性时,只需要调用RaisePropertyChanged(PropertyName)就可以进行属性更改通知了。

    WPF命令是通过实现 ICommand 接口创建的

    ICommand 公开了两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged)

    Execute方法 执行与命令关联的操作
    CanExecute方法  确定是否可以在当前命令目标上执行命令,返回值为true则按钮可用,为false的时候按钮disable。

    在MvvmLight中,实现ICommand接口的类是RelayCommand。

     

    我们在 WelcomeViewModel 类中添加以下内容:

    public class WelcomeViewModel : ViewModelBase
        {
           ......
    
            #region 命令
            private RelayCommand changeTxtCommand;
            /// <summary>
            /// 改变文本框内容
            /// </summary>
            public RelayCommand ChangeTxtCommand
            {
                get
                {
                    if (changeTxtCommand == null)
                        return new RelayCommand(() => ExcuteChangeTxt());
                    return changeTxtCommand;
                }
                set { changeTxtCommand = value; }
            }
    
            /// <summary>
            /// 改变文本框内容
            /// </summary>
            private void ExcuteChangeTxt()
            {
                Welcome.Introduction = "新修改后的内容";
            }
            #endregion
        }

     注:RelayCommand(() => ExcuteChangeTxt());  表示没有参数 ,且 返回类型为void,这个在下一篇博文中详细说明。

    在 WelcomeView.xaml 中添加按钮:

      <StackPanel  VerticalAlignment="Center" HorizontalAlignment="Center" >
                <TextBlock  Text="{Binding Welcome.Introduction}" FontSize="30" ></TextBlock>
                <Button Command="{Binding ChangeTxtCommand}">更改文本</Button>
            </StackPanel>

    测试窗口如下:

    点击按钮后  =》

    符号我们预期,这样,我们简单的实现了按钮“事件”。


    总结:

    在MVVM Light框架中,事件是通过命令实现,所有的命令都从 RelayCommand 派生出来。

    简单的步骤如下:

    private RelayCommand changeTxtCommand;
    
    public RelayCommand ChangeTxtCommand
    {
      get
      {
        if (changeTxtCommand == null)
        return new RelayCommand(() => ExcuteChangeTxt());
        return changeTxtCommand;
      }
      set { changeTxtCommand = value; }
    }
    
    private void ExcuteChangeTxt()
    {
      Welcome.Introduction = "新修改后的内容";
    }

    最后在View中绑定命令即可。例如:<Button Command="{Binding ChangeTxtCommand}">更改文本</Button>


    这一小节到此结束,新手入门,不免有偏差,请留言不吝赐教。

  • 相关阅读:
    字符串常量池
    JDK1.8-java.lang.Object类源码阅读
    请给你的Mysql(InnoDB)表加上主键吧
    java线程占多大的内存,占哪里的内存?
    c# 多线程
    c# 遍历文件夹及其所有文件
    T-SQL 查询语句总结
    SQL Server使用LIKE运算符进行匹配查询
    sql server中关于批处理与脚本的简单介绍
    关于SQL Server数据表的五中约束
  • 原文地址:https://www.cnblogs.com/pukki/p/10006431.html
Copyright © 2011-2022 走看看