RelayCommand命令
原文: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命令相关推荐
- WPF CanExecuteChanged
继承ICommand ,RelayCommand命令 1 public class RelayCommand : ICommand 2 { 3 private readonly Action _exe ...
- V.CodeGenerator WPF代码生成器
V.CodeGenerator WPF代码生成器 Vampirewal.Core内容 1.AppConfig(程序的配置文件) 2.IoC容器 3.基础服务 4.Model基类 5.SimpleMVV ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...
- 利刃 MVVMLight 7:命令深入
原文:利刃 MVVMLight 7:命令深入 上面一篇我们大致了解了命令的基本使用方法和基础原理,但是实际在运用命令的时候会复杂的多,并且会遇到各种各样的情况. 一.命令带参数的情况: 如果视图控件所 ...
- WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)
MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): 1 <Wi ...
- WPF--ContextMenu绑定命令的一个问题
出现的问题 xaml代码: <Window.DataContext><vm:MainWindowViewModel/></Window.DataContext>&l ...
- WPF(三) WPF 命令
1.WPF 命令的概念 WPF 区别于 WinForm,在继承WinForm熟悉的事件和委托技术之上,还提供了一套完善的命令(Command)系统.简单来说,命令是一个任务的完整封装,例如保存,复 ...
- WPF 命令绑定的各种方式
WPF 命令绑定的各种方式 引言 在WPF开发过程中,不得不学习的就是MVVM模式.但是在MVVM中又绕不开命令(Command)的使用.下面通过几种方式介绍我了解的WPF命令绑定方式. 如何使用 控 ...
- Kubectl 常用命令, 开发人员常用k8s命令
Kubectl 常用命令: 什么是常用,我用的,就是常用的
最新文章
- pytorch下载时出现错误:EOFError: Compressed file ended before the end-of-stream marker was reached
- 编程入门python语言是多大孩子学的-什么是少儿Python编程?这一篇就够啦!
- VMware虚拟机不能联网的解决办法
- CriminalIntent项目的开发
- 分布式事务科普(初识篇)
- Shell 简单的java微服务jar包 -- 部署脚本
- axios.post提交的三种请求方式
- 即时通讯的飞秋2010下载
- php @touch,touch - [ php中文手册 ] - 在线原生手册 - php中文网
- 洛谷——P1017 进制转换
- linux 安装talib
- 同义句转换在线翻译器的软件
- Vue错误 Module not found:Error:Can‘t resolve ‘vue/types/umd‘ in ......
- 国开计算机实操题操作,国开大学计算机实操答案一.
- 「大专及以上学历人员必看」学信网电子注册备案表
- pytorch函数详解 附带测试demo
- 【微信小程序】图库——(小程序篇)
- 算法工程师13——机器学习强化
- ubuntu系统录屏recordmydesktop与ogv视频转换MP4
- 文本文件和二进制文件的区别和联系
热门文章
- 【Qt】Qt数据库简介
- 每天一道LeetCode-----从右向左观察一棵二叉树,返回能看到的元素
- 学习笔记-----关于C++中类的成员函数可以访问私有成员的问题
- EditPlus3.21注册码
- HDU - 6599 I Love Palindrome String (回文树+Manacher、回文树+hash)
- python3 pygame的发射子弹自编程序
- android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
- IDEA配置git环境
- [BUUCTF-pwn]——hitcontraining_uaf
- [攻防世界 pwn]——monkey