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的更多相关文章

  1. RelayCommand命令

    原文:http://www.cnblogs.com/xiepeixing/archive/2013/08/13/3255152.html 常用Wpf开发中我们在ViewModel中实现INotifyP ...

  2. MVVM模式应用 之的RelayCommand的使用

    实现MVVM模式Command是立下了汗马功劳.当然ICommand要引用using System.Windows.Input命名空间. 比如: (1)我们在xaml页面有一个Button按钮,我们需 ...

  3. MVVM模式的3种command总结[2]--RelayCommand

    MVVM模式的3种command总结[2]--RelayCommand RelayCommand本来是WPF下面用的一种自定义的command,主要是它用到了事件管理函数,这个SL下面是没有的.不过这 ...

  4. C# II: Class ViewModelBase and RelayCommand in MVVM

    好久不写WPF和MVVM,新建一个Project后,想起来ViewModelBase和RelayCommand没有.以下Code摘自MSDN上的Article:Patterns - WPF Apps ...

  5. MVVMLight学习笔记(五)---RelayCommand深究

    一.概述 有时候,单纯的命令绑定不一定能满足我们的开发需求,比如我们需要在命令绑定的时候传递一个参数,这个时候,我们就需要使用RelayCommand的泛型版本了. RelayCommand的泛型版本 ...

  6. MVVMLight学习笔记(四)---RelayCommand初探

    一.概述 在MVVM Light框架中,主要通过命令绑定来进行事件的处理. WPF中,命令是通过实现 ICommand 接口创建的. ICommand 公开了两个方法(Execute 及 CanExe ...

  7. wpf 下面用MVVC的RelayCommand命令引发的一个异常

    具体解决方法参见我的博问:https://q.cnblogs.com/list/myquestion

  8. 年度巨献-WPF项目开发过程中WPF小知识点汇总(原创+摘抄)

    WPF中Style的使用 Styel在英文中解释为”样式“,在Web开发中,css为层叠样式表,自从.net3.0推出WPF以来,WPF也有样式一说,通过设置样式,使其WPF控件外观更加美化同时减少了 ...

  9. WinRT自定义控件第一 - 转盘按钮控件

    之前的文章中,介绍了用WPF做一个转盘按钮控件,后来需要把这个控件移植到WinRT时,遇到了很大的问题,主要原因在于WPF和WinRT还是有很大不同的.这篇文章介绍了这个移植过程,由于2次实现的控件功 ...

随机推荐

  1. <a href>传参的中文乱码问题

    版权声明:本文为博主半原创文章,未经博主允许不得不转载时允许转载 :) 当需要href进行传参,参数为中文时,会出现乱码问题,最简单的方法是: 传入的值首先用escape()进行转码,然后在取值页面用 ...

  2. CSS3 rgba

    复制粘贴: <!DOCTYPE html > <html > <head> <meta charset="utf-8"> <t ...

  3. JAVA中的枚举小结

    枚举 将一组有限集合创建为一种新的类型,集合里面的值可以作为程序组件使用: 枚举基本特性 以下代码是枚举的简单使用: 使用values方法返回enum实例的数组 使用ordinal方法返回每个enum ...

  4. DROP_SNAPSHOT_RANGE过程不能清理表RM$_SNAPSHOT_DETAILS

    今天在测试.验证DROP_SNAPSHOT_RANGE不能彻底快照的过程中遇到了DROP_SNAPSHOT_RANGE无法清理WRM$_SNAPSHOT_DETAILS表中数据的情况,测试服务器版本为 ...

  5. 【SQL篇章--CREATE TABLE】

    [SQL篇章][SQL语句梳理 :--基于MySQL5.6][已梳理:CREATE TABLE][会坚持完善] SQL : 1. Data Definition Statements: 1.3 CRE ...

  6. 4、解决native库不兼容

    解决native库不兼容 现象: 报警告 [root@hadoop1 hadoop-]# bin/hdfs dfs -ls /input // :: WARN util.NativeCodeLoade ...

  7. n枚硬币问题(找假币)

    问题描述: 在n枚外观相同的硬币中,有一枚是假币,并且已知假币与真币的重量不同,但不知道假币与真币相比较轻还是较重.可以通过一架天平来任意比较两组硬币,设计一个高效的算法来检测这枚假币. 解题思路: ...

  8. ARM指令

    语法格式 <opcode>{<cond>}{S} <Rd>, <Rn>,<shifter_operand> {}表示是可选的部分,<& ...

  9. 虚拟机centos6.5 --ssh免密码登录

    说明:此处是以hadoop虚拟机3台机器为背景进行设置,即master.slave01.slave02 1.在master上,生成公钥.私钥 用hadoop用户登录系统,进入个人主目录,即/home/ ...

  10. 8、FTP,二种文本传输模式

    一.基本知识 1. FTP是 TCP/IP协议族 的协议之一,简称文件传输协议,主要用于远距离文件传输,如文件的上传和下载 2. 下面都是以VSFTP服务器为例 VSFTP服务器的用户有三种形式: 匿 ...