今天学习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="" ></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>


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

最新文章

  1. linux 下串口独占方式打开
  2. 搭建自己的LAMP
  3. linux Basis --- tar command
  4. Contains Duplicate III
  5. Python之正则
  6. Spring学习笔记(二)
  7. matplotlib 初使用
  8. matlab的常用快捷键
  9. 一步一步在Windows中使用MyCat负载均衡 上篇
  10. BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
  11. mpvue微信小程序多列选择器用法:实现省份城市选择
  12. go语言入门教程:基本语法之数据类型
  13. 【中间件安全】Apache 安全加固规范
  14. 20165309 Linux安装及学习
  15. Git-忽略规则.gitignore生效
  16. unity---------------------关于BuildAssetBundles的使用(打包)
  17. word2vec 中的数学原理详解(一)目录和前言【转】
  18. springboot2.0 web 开发标准目录架构
  19. Java Math类学习
  20. Scrum 5.0(继4.0)

热门文章

  1. runloop与线程的关系
  2. dede5.7 GBK 在php5.4环境下 后台编辑器无法显示文章内容
  3. DB2频繁出现死锁,常用解决问题的命令
  4. Vagrant WinNFSd
  5. MyIocp 测试截图
  6. yii框架场景的用法
  7. Java的进阶之道
  8. Shell 中expr的使用
  9. pyhthon lambda
  10. 对于java的命名规范(标识符)