今天学习MVVM架构中“事件”的添加并调用,特记录以下,学习资料均来自于网络,特别感谢翁智华 的 利刃 MVVMLight 6:命令基础html
扩展:网络
经常使用Wpf开发中咱们在ViewModel中实现INotifyPropertyChanged接口,经过触发PropertyChanged事件达到通知UI更改的目的;
在MVVMLight框架里,这里咱们定义的ViewModel都继承自ViewModelBase,ViewModelBase封装在MvvmLight框架中,它已经实现了INotifyPropertyChanged接口,
所以咱们在定义ViewModel属性时,只须要调用RaisePropertyChanged(PropertyName)就能够进行属性更改通知了。架构
WPF命令是经过实现 ICommand 接口建立的框架
ICommand 公开了两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged)mvvm
Execute方法 | 执行与命令关联的操做 |
CanExecute方法 | 肯定是否能够在当前命令目标上执行命令,返回值为true则按钮可用,为false的时候按钮disable。 |
在MvvmLight中,实现ICommand接口的类是RelayCommand。post
咱们在 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 中添加按钮:url
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" > <TextBlock Text="{Binding Welcome.Introduction}" FontSize="30" ></TextBlock> <Button Command="{Binding ChangeTxtCommand}">更改文本</Button> </StackPanel>
测试窗口以下:spa
点击按钮后 =》
符号咱们预期,这样,咱们简单的实现了按钮“事件”。
总结:
在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>
这一小节到此结束,新手入门,难免有误差,请留言不吝赐教。