WPF自定义命令和处发命令

接实现ICommand接口的命令。在介绍之前,先看一下ICommand接口的原型:

  • event EventHandler CanExecuteChanged;
  • bool CanExecute(object parameter);
  • void Execute(object parameter);

  其中第一个事件为,当命令可执行状态发生改变时,可以激化此事件来通知其他对象。另外两个方法在上面已经用过同名的,在此不做重复说明。下面开始实现一个自定义直接实现ICommand接口的命令,同样实现点击源控件,清除目标控件的内容:

 1  //为了使目标控件,含有Clear()方法,所以在此一个定义接口
 2     public interface IView
 3     {
 4         void Clear();
 5     }
 6     
 7     //定义命令
 8     public class ClearCommand : ICommand
 9     {
10         public event EventHandler CanExecuteChanged;
11 
12         public bool CanExecute(object parameter)
13         {
14             throw new System.NotImplementedException();
15         }
16 
17         public void Execute(object parameter)
18         {
19             IView view = parameter as IView;
20             if (view != null)
21             {
22                 view.Clear();
23             }
24         }
25     }
26 
27     //自定义命令源
28     public class MyCommandSource : System.Windows.Controls.UserControl, ICommandSource
29     {
30         public ICommand Command { get; set; }
31 
32         public object CommandParameter { get; set; }
33 
34         public IInputElement CommandTarget { get; set; }
35 
36         //重写点击处理函数,注意由于事件的优先级不同,如果命令源是button的话,下面的函数不起作用
37         protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
38         {
39             base.OnMouseLeftButtonDown(e);
40 
41             if (this.CommandTarget != null)
42             {
43                 this.Command.Execute(this.CommandTarget);
44             }
45         }
46     }

 

posted @ 2014-12-01 15:48  玖彩技术团队  阅读(527)  评论(0编辑  收藏  举报
以上只是个人想法和实践经验,如果有文字错误和语法错误,请加以指点! QQ:247039968 emil:wujc@younger.com 无论是美女的歌声,还是鬣狗的狂吠,无论是鳄鱼的眼泪,还是恶狼的嚎叫,都不会使我动摇