MvvmLight(三)命名绑定Command
2015-09-04 12:35
435 查看
命名绑定Command
使用目的
在View层,点击一个Button,调用后台的一个方法(后台也许是ViewModel、Logic、Model,用后台代替)关键词
RelayCommand—–通道,进行前台命名绑定后台方法Execute—后台执行的方法
CanExecute—后台执行的方法是否可以执行
RaiseCanExecuteChanged—刷新后台执行的方法是否可以执行
如何使用
步骤1:建立后台的方法private void ClickExecute() { //触发的方法,习惯上绑定要触发的方法后面 + Execute }
步骤2:通道绑定后台方法
public RelayCommand ClickCommand { get; private set; }//习惯上要绑定的属性命名后面 + Command ClickCommand = new RelayCommand(ClickExecute);//写在构造中
步骤3:通道绑定前台的命名
步骤4:后台方法是否触发
到了步骤3结束,实际已经可以了,light还提供一个条件,是指定你刚刚绑定的方法是否触发,你的需求可能是中途不能触发
举例说明:
1.我有个计数Count = 0;
2.写在ClickExecute方法中的是Count++;
3.我的目的是当Count>2的时候Count就不在++了,如下做:
private bool ClickCanExecute() { return count < 2; }
新增限制条件的方法,在步骤2中改为(加在后面), 搞定了,后面的参数只能是bool,当Count>=2,Debug都不会跳入ClickExecute()中了,没有写CanExecute的时候默认为true
ClickCommand = new RelayCommand(ClickExecute, ClickCanExecute);
追加一:RaiseCanExecuteChanged
环境:
数据库中有A1-A10种数据,界面上有11个按钮,B1是连接数据库,B2-11是分别显示A1-A10,当想调用A1-A10其中任意一种数据时,需先Button1连接……原先的Code:
方法CanShow返回bool判断是否可以显示,就是判断DB是否连接Button2-11中先调用CanShow,是false直接return
改进遇到的问题
Button2-11Binding,在调用Execute的时候,后面加入CanShow来充当CanExecute。运行时,CanShow肯定是false,还没有Click B1,B2-B11的按钮是未启用状态,灰色的,然后Click B1,仍然是灰色的
解决
在B1绑定的Execute中加一行即可,步骤4中的写法只能应付简单的环境B2.RaiseCanExecuteChanged();
追加二:后台方法定义更美观
环境:
还是追加一的环境,后台的构造中,定义绑定按钮的方法例如下面这种,写了11条,累计起来,相当不美观ClickCommand = new RelayCommand(ClickExecute);
解决:
ClickCommand不是一个属性吗,可以写在他的get中,效果是一样的public RelayCommand ClickCommand { get { return new RelayCommand(ClickExecute); } }
相关文章推荐
- 开源免费跨平台opengl opencv webgl gtk blender, opengl贴图程序
- expect 参数处理之一
- 几款屏幕录制软件 ActivePresente
- error: /usr/include/stdio.h: Permission denied 的一种情况分析
- gcc -D 传值给代码,默认值为1
- linux内核编译环境配置
- 一种不能删除文件的情况分析过程
- 内核编程实例,多文件的Makefile
- c 有意思的数组初始化
- C 文件直接包含
- [面试技巧]16个经典面试问题回答思路
- 一种不能删除文件的情况分析过程
- 内核编程实例,多文件的Makefile
- c 有意思的数组初始化
- C 文件直接包含
- [面试技巧]16个经典面试问题回答思路
- HTML5本地存储:SessionStorage, LocalStorage, Cookie
- JS实现横向拉伸动感伸缩菜单效果代码
- 解决MySQL链接不上问题
- Hello JSP!——<jsp:forward>动作元素篇