MVVM Light 新手入门(3) :ViewModel / Model 中定义“事件” ,并在View中调用 (无参数调用)
今天学习MVVM架构中“事件”的添加并调用,特记录如下,学习资料均来自于网络,特别感谢翁智华 的 利刃 MVVMLight 6:命令基础
- 在MVVM Light框架中,事件是WPF应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理。
- 相对于CodeBehind 的方式,使用命令会好很多:最大的特点就是解耦View和ViewModel的行为交互,将视图的显示和业务逻辑分开。
- 对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>
这一小节到此结束,新手入门,不免有偏差,请留言不吝赐教。
最新文章
- linux 下串口独占方式打开
- 搭建自己的LAMP
- linux Basis --- tar command
- Contains Duplicate III
- Python之正则
- Spring学习笔记(二)
- matplotlib 初使用
- matlab的常用快捷键
- 一步一步在Windows中使用MyCat负载均衡 上篇
- BZOJ 2822: [AHOI2012]树屋阶梯 [Catalan数 高精度]
- mpvue微信小程序多列选择器用法:实现省份城市选择
- go语言入门教程:基本语法之数据类型
- 【中间件安全】Apache 安全加固规范
- 20165309 Linux安装及学习
- Git-忽略规则.gitignore生效
- unity---------------------关于BuildAssetBundles的使用(打包)
- word2vec 中的数学原理详解(一)目录和前言【转】
- springboot2.0 web 开发标准目录架构
- Java Math类学习
- Scrum 5.0(继4.0)