在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. [Linux] 结构化命令 if

    语法结构如下: 1. if-then语句 # if-then语句 if command #根据conmmand的退出状态码,选择执行语句 then commands fi e.g. #!usr/bin ...

  2. 5ucms后台调用标签

    <%=Rs.Data(1,i)%>栏目 <%=Rs.Data(2,i)%>标题 <%=Rs.Data(3,i)%>推荐 <%=Rs.Data(4,i)%> ...

  3. javascript学习面向对象(二)

    主要内容: prototype扩展应用示例: 对比如下: 数组中forEach用法示例: 从上面示例可以看出,forEach只适合遍历一维数组: 应用prototype扩展实现全部元素遍历如下: 简单 ...

  4. oracle 11gr2 官方文档下载

    http://www.oracle.com/technetwork/database/enterprise-edition/documentation/index.html

  5. hd 2112 HDU Today

    Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...

  6. Spring 笔记

    依赖注入(Dependency Injection DI) 通过依赖注入,对象的依赖关系将由系统中负责协调对象的第三方组件在创建对象的时候进行设定.(p6 spring之旅) 在创建类的时候需要依赖的 ...

  7. spring-aop学习

     SpringAOP学习 author:luojie 1.  AOP中的基本概念 AOP的通用术语,并非spring java所特有.很遗憾AOP的术语不是特别的直观.但如果让Spring java来 ...

  8. Redis多机常用架构-cluster

    Redis-cluster:去中心化,中间件,集群中任意节点平等,任一节点可获得全局的数据 Redis-cluster 拓扑图: 架构演变及 cap 理论: 单机 Redis 属于 cp 模型. Re ...

  9. grunt

    Grunt是node的自动化构建工具,可以执行像压缩, 编译, 单元测试, 代码检查以及打包发布的任务. 类似于C/C++程序通过makefile管理编译测试打包的过程,Java程序通过Maven,A ...

  10. Beta版本的贡献率百分比

    我真的是服了..刚刚写完最后一次作业,还感叹了一下终于完成了最后的工作,一看群还得发一篇. 贡献率这种东西不是应该默认是100%除以团队人数的吗,有没有搞错啊,这样很容易引起团队不融洽的啊. 0313 ...