在MVVM模式中,我们将Button的方法写到ViewModel中,然后绑定到前端界面。通常的做法是写一个类,继承ICommand接口,然而如果按钮比较多的话,就需要写很多的类,对于后期维护造成很大的不变,微软提供了一个DelegateCommand类,可以简化开发。

使用方法如下:

首先生命ViewModel属性,GetMsg函数,

 public DelegateCommand GetMsg
{
get { return new DelegateCommand(GetMessage); }
}

在ViewModel中写方法GetMessage,代码如下:

 public void GetMessage(object parameter)
{
//Your code...
}

然后在前端绑定,代码如下:

<Button Command="{Binding GetMsg}" IsEnabled="{Binding custom.IsEnable,Mode=TwoWay}"  
CommandParameter="{Binding}" Content="OK" Width="" Height=""
HorizontalAlignment="Left" Margin="149,228,0,0" Name="button1"
VerticalAlignment="Top" Canvas.Left="-105" Canvas.Top="" />

其实,DelegateCommand只是一个继承自ICommand的类,下面我们来写自己的DelegateCommand类,实现同样的功能。代码如下:

public class DelegateCommand : ICommand
{
private Action action;
private Action<Object> actionT; public DelegateCommand(Action action)
{
this.action = action;
} public DelegateCommand(Action<Object> action)
{
this.actionT = action;
} public bool CanExecute(object parameter)
{
return true;
} public event EventHandler CanExecuteChanged; public void Execute(object parameter)
{
if (action != null)
{
action();
}
if (actionT != null)
{
actionT.Invoke(parameter);
}
}
}

这个类有两个构造方法,有参数的和无参数的,可以根据自己的需要扩展,使用起来非常方便。

在MVVM模式中,按钮Click事件的绑定方法的更多相关文章

  1. MVVM模式中WPF数据的完全绑定

    一:截图,描述:将后台代码的姓名.年龄绑定到文本框,单击”增加年龄“--年龄自+1,单击”显示年龄“--弹出年龄的显示对话框,实现了从文本框修改年龄和后台更改年龄并显示到文本框 运行结果和解决方案管理 ...

  2. silverlighter下MVVM模式中利用Behavior和TargetedTriggerAction实现文本框的一些特效

    在silverlight一般开发模式中,给文本框添加一些事件是轻而易举的,然而MVVM开发模式中,想要给文本框添加一些事件并非那么容易,因为MVVM模式中,只有ICommand接口,而且也只有Butt ...

  3. WPF MVVM模式中,通过命令实现窗体拖动、跳转以及显隐控制

    原文:WPF MVVM模式中,通过命令实现窗体拖动.跳转以及显隐控制 在WPF中使用MVVM模式,可以让我们的程序实现界面与功能的分离,方便开发,易于维护.但是,很多初学者会在使用MVVM的过程中遇到 ...

  4. “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置

    这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一 ...

  5. 分享一个移动项目中消除click事件点击延迟的方法

    对于前端工程师来说,apicloud无疑给我们提供了很好的平台,有各种各样的模块供我们使用,但是在实际项目的时候,很大部分的代码,还是需要我们用html css js来实现的.但是呢,移动端页面对于c ...

  6. Messenger在MVVM模式中的应用

    Messenger在MVVM模式中的应用 Messenger在MVVM中应用的前提 我们知道在MVVM架构中,系统平台的Silverlight客户端界面开发和业务逻辑已经被分开,XAML是SL的主要部 ...

  7. vue.js 1.0中用v-for遍历出的li中的@click事件在移动端无效

    在vue.js使用v-for遍历出的li中的@click事件在移动端无效,在网页端可以执行,代码如下 <template> <div class="rating-secti ...

  8. WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参

    原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataC ...

  9. GridControl控件添加按钮列及在按钮Click事件中得到行数据 zt

    在GridControl中添加按钮列的步骤如下: 1. 把列的ColumnEdit属性设置为RepositoryItemButtonEdit 2. 把TextEditStyle属性设置为HideTex ...

随机推荐

  1. 使用odoo价格表[pricelist]对价格进行特别处理,如 .99

    问题1, 销售价格 自动设置为 9.99 问题2, 将销售价格从 10.5 设置为 10.00 这些都可以用 priceList 实现,具体实现如下 首先,启用 priceList 在 价格表项目 有 ...

  2. <head></head>

    <!DOCTYPE html><html lang="en"><head>    <meta charset="utf-8&qu ...

  3. freeCodeCamp:Where do I belong

    我身在何处? 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引. 举例:where([1,2,3,4], 1.5) 应该返回 1.因为1.5插入到数组[1,2,3,4]后变成[1,1 ...

  4. 关于“float”的一次探索--遇到了一个span元素可以设置宽高引发的思考

    起初,这个问题和float还有设置宽高之间是没有任何关联的,一开始这是一个关于height和line-height的问题,目的是为了探究一下这两者之间的关系,但是在学习的过程中,我翻之前写的代码,发现 ...

  5. leetcode problem sum

    2. Add Two Numbers You are given two linked lists representing two non-negative numbers. The digits ...

  6. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

  7. vs2013的安装以及单元测试

    一.安装过程 1.下载vs2013安装包,打开进行安装.安装过程时间有点长,大概用了一个小时. 2.安装完成.需要登录,可以选择以后再说. 3.选择颜色主题. 4.打开vs2013的界面. 5.添加密 ...

  8. tableindex

    在写代码的时候,失焦的第一反应便是ng-blur,没想到在一个标签上其作用了,多加了几个标签没反应,于是发现了tableindex,写的代码列子如下,希望可以帮助你: <img src='{{a ...

  9. TestNG参数化测试【转】

    原文:http://www.yiibai.com/testng/20130916303.html 在TestNG的另一个有趣的功能是参数测试.在大多数情况下,你会遇到这样一个场景,业务逻辑需要一个巨大 ...

  10. PHPExcel(1.8.0) 帮助代码

    以下代码不能直接运行,只是提供各种方法调用写法. require_once dirname(__FILE__) . '/Classes/PHPExcel.php'; $objPHPExcel = ne ...