WPF命令(RoutedCommand自定义命令,实现ICommand接口自定义命令)。推...

WPF命令(RoutedCommand自定义命令,实现ICommand接口自定义命令)。推...

2023年7月19日发(作者:)

WPF命令(RoutedCommand⾃定义命令,实现ICommand接⼝⾃定义命令)。推。。。强烈推荐阅读⼀、命令基本元素及关系 我们已经知道WPF⾥已经有了路由事件,可以发布及传播⼀些消息,那为什么还需要命令呢?这是因为事件指负责发送消息,对消息如何处理则不管,⽽命令是有约束⼒,每个接收者对命令执⾏统⼀的⾏为,⽐如菜单上的保存,⼯具栏上的保存都必须是执⾏同样的保存。

在WPF中,命令(Commanding)被分割成了四个部分,分别是ICommand,ICommandSource,CommandTarget和CommandBinding。下⾯我们来分别探讨这四个部分。 命令(Command):实现了ICommand接⼝的类,经常使⽤的有RoutedCommand类 (private RoutedCommand clearCmd = newRoutedCommand("序列化的声明名称", typeof(所有者类型));) 命令源:是命令的发送者,是实现了ICommandSource接⼝的类,⼤部分界⾯的控件都实现了这个接⼝,Button, MenuItem 等等。 (为按钮设置调⽤的命令 如:按钮.Command=) 命令⽬标:命令的接收者,命令⽬标是视线了IInputElement接⼝的类。 (设置引发指定命令的元素 如:按钮.CommandTarget= ) 命令关联:负责⼀些逻辑与命令关联起来,⽐如判断命令是否可以执⾏,以及执⾏完毕后做⼀些处理。 1、CommandBinding :将RoutedCommand 绑定到事件处理程序。 ( //CommandBinding 将命令绑定到事件处理程序 CommandBinding cb = new CommandBinding(); //命令 d = 命令对象; //事件处理程序 cute += new CanExecuteRoutedEventHandler(cb_CanExecute); ed += new ExecutedRoutedEventHandler(cb_Executed); ) 2、把命令关联安置在外围控件上(将命令CommandBinding添加到命令集合CommandBindings 中) 布局控件.(CommandBinding对象);四个命令元素之间的关系:

实例⼀:RoutedCommand⾃定义命令: 与业务逻辑⽆关的命令,使⽤ RoutedCommand,业务逻辑要依靠外围的CommandBinding来实现。这样⼀来,如果对CommandBinding管理不善就可能造成代码混乱⽆章,毕竟⼀个CommandBinding要牵扯到谁是它的宿主以及它的两的事件处理器。

使⽤ Button 来发送这个命令,当命令送达到 TextBox 时,TextBox被清空(如果TextBox没有⽂字,则命令不可以被发送)效果:

代码: