博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVM模式的3种command总结[1]--DelegateCommand
阅读量:5287 次
发布时间:2019-06-14

本文共 2884 字,大约阅读时间需要 9 分钟。

查了不少资料,大概理清楚的就是有3种。当然类名可以自己取了,不过为了便于记忆和区分,还是和看到的文章里面用一样的类名。

1.DelegateCommand

2.RelayCommand

3.AttachbehaviorCommand

因为MVVM模式适合于WPF和SL,所以这3种模式中也有一些小差异,比如RelayCommand下面的CommandManager方法就是WPF下面的,SL下面无法使用,不过我认为这3种方法中的基本思路都如出一辙,都是出自那位外国牛人的文章里面。主要的区别在于和VIEW中的控件的绑定使用上。有点不同的attachbehaviorcommand是prism4里面的一种设计模式,这个区别有点大。但我自己觉得最方便的还是这个DelegateCommand。

 

1 ///  2     /// Delegatecommand,这种WPF.SL都可以用,VIEW里面直接使用INTERACTION的trigger激发。比较靠谱,适合不同的UIElement控件 3     ///  4     public class DelegateCommand : ICommand 5     { 6         Func
canExecute; 7 Action
executeAction; 8 bool canExecuteCache; 9 10 public DelegateCommand(Action executeAction, Func
canExecute)11 {12 this.executeAction = executeAction;13 this.canExecute = canExecute;14 }15 16 #region ICommand Members17 18 public bool CanExecute(object parameter)19 {20 bool temp = canExecute(parameter);21 22 if (canExecuteCache != temp)23 {24 canExecuteCache = temp;25 if (CanExecuteChanged != null)26 {27 CanExecuteChanged(this, new EventArgs());28 }29 }30 31 return canExecuteCache;32 }33 34 public event EventHandler CanExecuteChanged;35 36 public void Execute(object parameter)37 {38 executeAction(parameter);39 }40 41 #endregion42 }

这个类大概可以这样来理解,构造函数中的action和func,action负责判断是否执行这个command,action就是触发这个command之后要执行的方法。这样理解最浅显,但对刚熟悉command的我来讲,这样最方便记忆和学习,为了使用ICommand接口实现的方法和事件的解释搜搜就可以找到,但是刚开始理解起来还是有点晦涩。

下面是VM里面用这个command的例子。绑定了一个button控件,最简单例子。cm1Click就是构造函数里面的fuc,负责执行响应事件的方法。Cancm1Click就是构造函数里面的action,负责判断这个Command的响应事件是否执行,这里没有用到判断式,直接赋了一个true.

1 public class TestViewModels:INotifyPropertyChanged 2 { 3         public TestViewModels() 4         { 5             ...... 6             cm1click = new DelegateCommand(cm1Click,Cancm1Click);   //初始化delegatecommand 7              8         } 9        ....10 11        //DelegateCommand12 13         #region command114 15         public ICommand cm1click { get; set; }16         public void cm1Click(object param)17         {18             MessageBox.Show("CM1 clicked!");19         }20 21         private bool Cancm1Click(object param)22         {23             return true;24         }25 26         #endregion command127        ......28 }

 

在XAML里面,用interaction来绑定这个事件,而不是在button里面用command来绑定,这样做有个好处,就是非常直观,并且可以响应其他的很多事件

 

如果是其他控件如grid等,要响应selectionchanged事件之类的,就可以直接在trigger里面把EventName修改下就可以了。在blend里面更方便,可以直接选择。但是有个问题一直没搞明白.这样的话,怎么获取事件的参数,我这里有个例子,再看看了再更新下。

转载于:https://www.cnblogs.com/matoo/archive/2012/04/14/2447159.html

你可能感兴趣的文章
MYSQL INSERT DELAYED
查看>>
阅读-阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读
查看>>
实验五
查看>>
iview自定义配置
查看>>
C++容器操作
查看>>
js移动端滑块验证解锁组件
查看>>
QTP函数使用(实战系列三)
查看>>
解决eclipse building workspace慢的情况
查看>>
Linux系统启动详解(一)
查看>>
web应用BaseDao及BaseDaoImpl
查看>>
word怎么在方框中打对号
查看>>
PHP扩展--vld查看opcode代码
查看>>
查看oracle数据库编码:
查看>>
提供他人class文件
查看>>
spring与quartz定时器
查看>>
[c#]asp.net开发微信公众平台(8)微信9大高级接口,自定义菜单
查看>>
云计算技术了解
查看>>
【Android】Kill Service
查看>>
处理高并发,防止库存超卖
查看>>
线性表(不间断更新)
查看>>