RelayCommand
Mvvm最大的特点就是分离了View和ViewModel,将数据的显示和业务逻辑分开。使用WPF的Binding,我们不仅能够
将数据从ViewModel绑定到View,同时也可以将行为绑定到View。例如,在主界面上点击一个按钮,这个按钮实际完成的操作是ViewModel中对应的方法。这里我们用到Mvvm框架中的RelayCommand。下面是几种常用的情况不带参数的RelayCommand
点击按钮,弹出消息框
AppView.xamlAppViewModel.cs
////// 显示消息命令 /// public RelayCommand ShowMsgCommand { get; set; } public AppViewModel() { //初始化命令 ShowMsgCommand= new RelayCommand(ShowMsg); } ////// 命令具体实现 /// private void ShowMsg() { MessageBox.Show("HelloWorld!"); }
带参数的RelayCommand
点击按钮,显示我们输入的文本
AppView.xamlAppViewModel.cs
////// 显示消息命令 /// public RelayCommandShowTxtCommand { get; set; } public AppViewModel() { //初始化命令 ShowTxtCommand = new RelayCommand (ShowMsg); } /// /// 命令具体实现 /// private void ShowMsg(string txt) { MessageBox.Show(txt); }
RelayCommand是否可执行
注意,这是一个非常有用的功能,当RelayCommand执行的条件不满足时,将会导致界面上的按钮是禁用的。条件的判断
是由WPF程序自动执行的,并且频率非常高,所以,判断是否可执行的代码应该尽量简单。AppView.xaml
AppViewModel.cs
private string _txt; ////// 绑定到界面的Txt /// public string Txt { get { return _txt; } set { _txt = value; RaisePropertyChanged(() => Txt); } } ////// 显示消息命令 /// public RelayCommand ShowTxtCommand { get; set; } public AppViewModel() { //初始化命令 ShowTxtCommand = new RelayCommand(ShowMsg, CanShowMsgExecute); } ////// 命令具体实现 /// private void ShowMsg() { MessageBox.Show(Txt); } ////// 显示消息命令是否可以执行 /// ///private bool CanShowMsgExecute() { return !string.IsNullOrEmpty(Txt); }
注意:如果你使用的是.Net4.5,那么界面上的按钮可能禁用不到,这是Mvvm中的一个bug,不过作者已经修复了,解决
方案.RelayCommand的使用就是这么简单。
http://www.cnblogs.com/HelloMyWorld/p/4750062.html