今天學習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>
這一小節到此結束,新手入門,難免有誤差,請留言不吝賜教。