原文:http://www.cnblogs.com/xiepeixing/archive/2013/08/13/3255152.html

常用Wpf开发中我们在ViewModel中实现INotifyPropertyChanged接口,通过触发PropertyChanged事件达到通知UI更改的目的;

在MVVMLight框架里,这里我们定义的ViewModel都继承自ViewModelBase,ViewModelBase封装在MvvmLight框架中,它已经实现了INotifyPropertyChanged接口,

因此我们在定义ViewModel属性时,只需要调用RaisePropertyChanged(PropertyName)就可以进行属性更改通知了。

事件是WPF/SL应用程序中UI与后台代码进行交互的最主要方式,与传统方式不同,mvvm中主要通过绑定到命令来进行事件的处理,因此要了解mvvm中处理事件的方式,就必须先熟悉命令的工作原理。

一、RelayCommand命令

WPF/SL命令是通过实现 ICommand 接口创建的。 ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged)。 Execute 执行与命令关联的操作。CanExecute 确定是否可以在当前命令目标上执行命令。在MvvmLight中实现ICommand接口的类是RelayCommand,RelayCommand通过构造函数初始化Execute 和 CanExecute方法,因此,构造函数传入的是委托类型的参数,Execute 和 CanExecute则执行的是委托的方法,RelayCommand相关代码如下:

        public RelayCommand(Action execute, Func<bool> canExecute){if (execute == null){throw new ArgumentNullException("execute");}_execute = execute;_canExecute = canExecute;}[DebuggerStepThrough]public bool CanExecute(object parameter){return _canExecute == null ? true : _canExecute();}public void Execute(object parameter){_execute();}

二、 Comand属性绑定

简单的例子:一个TextBox和一个Button,TextBox非空内容时候Button才可用,可用的Button点击后把TextBox内容show出来。

<Window x:Class="MVVMLightDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:MVVMLightDemo.ViewModel"Title="MainWindow" Height="350" Width="525"><Window.DataContext><local:MainWindowViewModel></local:MainWindowViewModel></Window.DataContext><Grid><StackPanel><TextBox Text="{Binding UserName, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"></TextBox><Button Content="show" Command="{Binding ShowCommand}" CommandParameter="{Binding UserName}"></Button></StackPanel></Grid>
</Window>

ViewMode:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using System.Windows.Input;
using System.Windows;
namespace MVVMLightDemo.ViewModel
{public class MainWindowViewModel:ViewModelBase{private string _UserName;public string UserName{get { return _UserName; }set { _UserName = value; RaisePropertyChanged("UserName"); }}public ICommand ShowCommand{get{
                return new RelayCommand<string>((user) => {MessageBox.Show(user);}, (user) =>{return !string.IsNullOrEmpty(user);});}}}
}

转载于:https://www.cnblogs.com/xcsn/p/4454210.html

RelayCommand命令相关推荐

  1. WPF CanExecuteChanged

    继承ICommand ,RelayCommand命令 1 public class RelayCommand : ICommand 2 { 3 private readonly Action _exe ...

  2. V.CodeGenerator WPF代码生成器

    V.CodeGenerator WPF代码生成器 Vampirewal.Core内容 1.AppConfig(程序的配置文件) 2.IoC容器 3.基础服务 4.Model基类 5.SimpleMVV ...

  3. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  4. 利刃 MVVMLight 7:命令深入

    原文:利刃 MVVMLight 7:命令深入 上面一篇我们大致了解了命令的基本使用方法和基础原理,但是实际在运用命令的时候会复杂的多,并且会遇到各种各样的情况. 一.命令带参数的情况: 如果视图控件所 ...

  5. WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)

    MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): 1 <Wi ...

  6. WPF--ContextMenu绑定命令的一个问题

    出现的问题 xaml代码: <Window.DataContext><vm:MainWindowViewModel/></Window.DataContext>&l ...

  7. WPF(三) WPF 命令

    1.WPF 命令的概念 ​ WPF 区别于 WinForm,在继承WinForm熟悉的事件和委托技术之上,还提供了一套完善的命令(Command)系统.简单来说,命令是一个任务的完整封装,例如保存,复 ...

  8. WPF 命令绑定的各种方式

    WPF 命令绑定的各种方式 引言 在WPF开发过程中,不得不学习的就是MVVM模式.但是在MVVM中又绕不开命令(Command)的使用.下面通过几种方式介绍我了解的WPF命令绑定方式. 如何使用 控 ...

  9. Kubectl 常用命令, 开发人员常用k8s命令

    Kubectl 常用命令: 什么是常用,我用的,就是常用的

最新文章

  1. pytorch下载时出现错误:EOFError: Compressed file ended before the end-of-stream marker was reached
  2. 编程入门python语言是多大孩子学的-什么是少儿Python编程?这一篇就够啦!
  3. VMware虚拟机不能联网的解决办法
  4. CriminalIntent项目的开发
  5. 分布式事务科普(初识篇)
  6. Shell 简单的java微服务jar包 -- 部署脚本
  7. axios.post提交的三种请求方式
  8. 即时通讯的飞秋2010下载
  9. php @touch,touch - [ php中文手册 ] - 在线原生手册 - php中文网
  10. 洛谷——P1017 进制转换
  11. linux 安装talib
  12. 同义句转换在线翻译器的软件
  13. Vue错误 Module not found:Error:Can‘t resolve ‘vue/types/umd‘ in ......
  14. 国开计算机实操题操作,国开大学计算机实操答案一.
  15. 「大专及以上学历人员必看」学信网电子注册备案表
  16. pytorch函数详解 附带测试demo
  17. 【微信小程序】图库——(小程序篇)
  18. 算法工程师13——机器学习强化
  19. ubuntu系统录屏recordmydesktop与ogv视频转换MP4
  20. 文本文件和二进制文件的区别和联系

热门文章

  1. 【Qt】Qt数据库简介
  2. 每天一道LeetCode-----从右向左观察一棵二叉树,返回能看到的元素
  3. 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
  4. EditPlus3.21注册码
  5. HDU - 6599 I Love Palindrome String (回文树+Manacher、回文树+hash)
  6. python3 pygame的发射子弹自编程序
  7. android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
  8. IDEA配置git环境
  9. [BUUCTF-pwn]——hitcontraining_uaf
  10. [攻防世界 pwn]——monkey