MVVM Light 新手入門(3) :ViewModel / Model 中定義「事件」 ,並在View中調用 (無參數調用)

今天學習MVVM架構中「事件」的添加並調用,特記錄以下,學習資料均來自於網絡,特別感謝翁智華 的 利刃 MVVMLight 6:命令基礎html

  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)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>


 

這一小節到此結束,新手入門,難免有誤差,請留言不吝賜教。

相關文章
相關標籤/搜索