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>


 

这一小节到此结束,新手入门,难免有误差,请留言不吝赐教。

相关文章
相关标签/搜索