命令第一个用途是将语义以及调用命令的对象与执行命令的逻辑分离开来。
WPF 命令中的四个主要概念:
WPF 中的路由命令模型可以分为四个主要概念:命令、命令源、命令目标以及命令绑定:
命令是要执行的操作。
命令源是调用命令的对象。
命令目标是在其上执行命令的对象。
命令绑定是将命令逻辑映射到命令的对象。
WPF 中的命令是通过实现 ICommand 接口创建的。ICommand 的 WPF 实现是 RoutedCommand 类。
WPF 中的主要输入源是鼠标、键盘、墨迹和路由命令。更加面向设备的输入使用 RoutedEvent 来通知应用程序页中的对象已发生了输入事件。
ICommand接口只要是用于绑定Button等的点击事件,当数据改变的时候,会做出一些相应的通知,
当继承ICommand接口后,下面的方法则需要实现,它们之间的关系如图所示:
代码如下:
1 class manage:ICommand 2 { 3 public bool CanExecute(object parameter) 4 { 5 throw new NotImplementedException(); 6 } 7 8 public event EventHandler CanExecuteChanged; 9 10 public void Execute(object parameter) 11 { 12 throw new NotImplementedException(); 13 } 14 }
当界面上有此类事件发生时,它会通知所有的 RoutedCommand 发生 CanExecutedChanged 事件。
这时,已经绑定了这些 RoutedComamnd 的 CommandSource (主要是各类控件),会调用 RoutedCommand 的 CanExecute 方法来检测是否可执行,并根据返回的结果来设置自己的状态。如,当返回可执行时,作为 CommandSource 的按钮则会设置自己的 IsEnabled 属性为 true。此时,如果用户“点击”了这个 CommandSource 时,它会调用它所绑定的 RoutedCommand 的 Execute 方法。
在vm中command的绑定代码如下:
1 <Button Content="登陆" Grid.Column="1" Height="24" HorizontalAlignment="Left" Margin="15,18,0,0" Name="button1" VerticalAlignment="Top" Width="89" Command="{Binding login}" />