RelayCommand
RelayCommand
Mvvm最大的特点就是分离了View和ViewModel,将数据的显示和业务逻辑分开。使用WPF的Binding,我们不仅能够
将数据从ViewModel绑定到View,同时也可以将行为绑定到View。例如,在主界面上点击一个按钮,这个按钮实际完成
的操作是ViewModel中对应的方法。这里我们用到Mvvm框架中的RelayCommand。下面是几种常用的情况
不带参数的RelayCommand
点击按钮,弹出消息框
AppView.xaml
<Grid>
<Button Width="100" Height="30" Command="{Binding ShowMsgCommand}"></Button>
</Grid>
AppViewModel.cs
/// <summary>
/// 显示消息命令
/// </summary>
public RelayCommand ShowMsgCommand
{
get;
set;
}
public AppViewModel()
{
//初始化命令
ShowMsgCommand= new RelayCommand(ShowMsg);
}
/// <summary>
/// 命令具体实现
/// </summary>
private void ShowMsg()
{
MessageBox.Show("HelloWorld!");
}
带参数的RelayCommand
点击按钮,显示我们输入的文本
AppView.xaml
<Grid>
<TextBox x:Name="txt" Width="100" Height="30"></TextBox>
<Button Width="100" Height="30" Command="{Binding ShowTxtCommand}" CommandParameter="{Binding ElementName=txt,Path=Text}" Margin="0,100,0,0"></Button>
</Grid>
AppViewModel.cs
/// <summary>
/// 显示消息命令
/// </summary>
public RelayCommand<string> ShowTxtCommand
{
get;
set;
}
public AppViewModel()
{
//初始化命令
ShowTxtCommand = new RelayCommand<string>(ShowMsg);
}
/// <summary>
/// 命令具体实现
/// </summary>
private void ShowMsg(string txt)
{
MessageBox.Show(txt);
}
RelayCommand是否可执行
注意,这是一个非常有用的功能,当RelayCommand执行的条件不满足时,将会导致界面上的按钮是禁用的。条件的判断
是由WPF程序自动执行的,并且频率非常高,所以,判断是否可执行的代码应该尽量简单。
AppView.xaml
<Grid>
<TextBox x:Name="txt" Width="100" Height="30" Text="{Binding Txt,UpdateSourceTrigger=PropertyChanged}"></TextBox>
<Button Width="100" Height="30" Command="{Binding ShowTxtCommand}" Margin="0,100,0,0"></Button>
</Grid>
AppViewModel.cs
private string _txt;
/// <summary>
/// 绑定到界面的Txt
/// </summary>
public string Txt
{
get
{
return _txt;
}
set
{
_txt = value;
RaisePropertyChanged(() => Txt);
}
}
/// <summary>
/// 显示消息命令
/// </summary>
public RelayCommand ShowTxtCommand
{
get;
set;
}
public AppViewModel()
{
//初始化命令
ShowTxtCommand = new RelayCommand(ShowMsg, CanShowMsgExecute);
}
/// <summary>
/// 命令具体实现
/// </summary>
private void ShowMsg()
{
MessageBox.Show(Txt);
}
/// <summary>
/// 显示消息命令是否可以执行
/// </summary>
/// <returns></returns>
private bool CanShowMsgExecute()
{
return !string.IsNullOrEmpty(Txt);
}
注意:如果你使用的是.Net4.5,那么界面上的按钮可能禁用不到,这是Mvvm中的一个bug,不过作者已经修复了,解决
方案看这里.
RelayCommand的使用就是这么简单。
RelayCommand的更多相关文章
- RelayCommand命令
原文:http://www.cnblogs.com/xiepeixing/archive/2013/08/13/3255152.html 常用Wpf开发中我们在ViewModel中实现INotifyP ...
- MVVM模式应用 之的RelayCommand的使用
实现MVVM模式Command是立下了汗马功劳.当然ICommand要引用using System.Windows.Input命名空间. 比如: (1)我们在xaml页面有一个Button按钮,我们需 ...
- MVVM模式的3种command总结[2]--RelayCommand
MVVM模式的3种command总结[2]--RelayCommand RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的.不过这 ...
- C# II: Class ViewModelBase and RelayCommand in MVVM
好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...
- MVVMLight学习笔记(五)---RelayCommand深究
一.概述 有时候,单纯的命令绑定不一定能满足我们的开发需求,比如我们需要在命令绑定的时候传递一个参数,这个时候,我们就需要使用RelayCommand的泛型版本了. RelayCommand的泛型版本 ...
- MVVMLight学习笔记(四)---RelayCommand初探
一.概述 在MVVM Light框架中,主要通过命令绑定来进行事件的处理. WPF中,命令是通过实现 ICommand 接口创建的. ICommand 公开了两个方法(Execute 及 CanExe ...
- wpf 下面用MVVC的RelayCommand命令引发的一个异常
具体解决方法参见我的博问:https://q.cnblogs.com/list/myquestion
- 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)
WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...
- WinRT自定义控件第一 - 转盘按钮控件
之前的文章中,介绍了用WPF做一个转盘按钮控件,后来需要把这个控件移植到WinRT时,遇到了很大的问题,主要原因在于WPF和WinRT还是有很大不同的.这篇文章介绍了这个移植过程,由于2次实现的控件功 ...
随机推荐
- WPF学习之路(五) 实例:写字板
写字板实例一 MainWindow.xaml <Window x:Class="Wordpad01.MainWindow" xmlns="http://schema ...
- EMC Documentum DQL整理(一)
1.Get user SELECT * FROM dm_user WHERE r_is_group = 0 2.Get Group SELECT * FROM dm_group WHERE gro ...
- 分享 | Git常用的一些命令
最近,各个项目团队已经全面从svn转向Git 近期将会分享一些Git的常用操作及使用经验: 先了解下工作中一些需要用到的命令: --------------------------- Git基本常用命 ...
- CMPP3.0实现物联网卡通讯
当下物联网发展迅猛,物联网卡可以接受短信指令,实现千里之外尽可掌控.本人做过一个这类项目,把相关经验记录下来,分享给需要的人. 物联网卡通讯其实跟电话卡一样,可以使用CMPP协议.不过由于物联网卡位数 ...
- Hadoop自定义分组Group
matadata: hadoop a spark a hive a hbase a tachyon a storm a redis a 自定义分组 import org.apache.hadoop.c ...
- c++双字符常量
ascii表中 A是65,B是66,16706是A乘256+B 一些双字符的汉字也可以通过此方法转为int数字
- ARM体系结构
工作模式_ufisaus USR(User) :正常程序的执行状态 FIQ(Fast interrupt) :用于高速数据传输和通道处理 IRQ(Interrupt) :通常的中断处理 SVC(Sup ...
- mysql行锁和表锁
mysql innodb支持行锁和表锁,但是MyIsam只支持表锁.现在我们说说mysql innodb的行锁和 有如下表id为主键 为了出现演示效果,我们将mysql的autocommit设置为0 ...
- vmware 10 e1000e e1000e_cyclecounter_read 挂机解法
http://ehc.ac/p/e1000/mailman/message/34100875/In the e1000e_cyclecounter_read function, if incvalue ...
- Spring-data-jpa详解,全方位介绍。
本篇进行Spring-data-jpa的介绍,几乎涵盖该框架的所有方面,在日常的开发当中,基本上能满足所有需求.这里不讲解JPA和Spring-data-jpa单独使用,所有的内容都是在和Spring ...