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次实现的控件功 ...
随机推荐
- (转) 一步一步学习ASP.NET 5 (四)- ASP.NET MVC 6四大特性
转发:微软MVP 卢建晖 的文章,希望对大家有帮助.原文:http://blog.csdn.net/kinfey/article/details/44459625 编者语 : 昨晚写好的文章居然csd ...
- WPF学习之路(五) 实例:写字板(续)
WordPad 2.0 上一期实现了一虽然建议但是功能比较全面的Wordpad程序,但是程序代码略显繁琐,这一期更新改进版. MainWindows.xaml 添加 <Window.Comman ...
- [PL/SQL]使用PL/SQL实现ORACLE的Excel格式导入导出
注:教程所使用的PL/SQL Developer版本为10版本 1.oracle导出excel格式 第一步,在pl/sql窗口查询出你想要导出的数据. 第二步,选择你想导出的数据,然后右键" ...
- java web 中的servlet讲解
首先,解释一下解释一下什么是servlet?说一说Servlet的生命周期? servlet有良好的生存期的定义,包括加载和实例化.初始化.处理请求以及服务结束.这个生存期由javax.servlet ...
- SQL Server 分隔字符串函数实现
在SQL Server中有时候也会遇到字符串进行分隔的需求.平时工作中常常遇到这样的需求,例如:人员数据表和人员爱好数据表,一条人员记录可以多多人员爱好记录,而往往人员和人员爱好在界面展示层要一并提交 ...
- Tomcat 目录详解
一.文字版本: bin: 该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe.tomcat6w.exe,前者是在控制台下启动Tomcat,后者是 ...
- LNMP+zabbix分布式监控搭建及版本升级
LNMP+zabbix分布式监控搭建需要组件:gcc gcc-c++ openssl* pcre pcre-devel gd gd-devel libjpeg-devel libpng-devel l ...
- nginx日志切割脚本
#!/bin/bash ip=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d ...
- TCP/UDP常见端口参考
著名端口 端口号码 / 层 名称 注释 1 tcpmux TCP 端口服务多路复用 5 rje 远程作业入口 7 echo Echo 服务 9 discard 用于连接测试的空服务 11 systat ...
- 提升效率(时间准确性),减少时间和资源的消耗——由89C52/89C51的定时器中断引出的一些问题
尽量用最少的文字描述清楚问题. 事情起因是这样的: 要做遥控小车的平台迁移,STM32开发板无法方便地供电,因此又拿出了尘封的51(STC89C52RC),搭配上最小系统板就可以用排针加杜邦线供电了. ...