快捷搜索:

简单理解

作者: 电脑单机下载  发布:2019-09-10

命令(Command)

2018/1/10 19:06:35

命令能够约束代码,还足以约束步骤逻辑。(事件的职能是宣布和扩散一些音信,对如何响应事件不做规定,每种接收者能够动用自个儿的一颦一笑来响应事件。也正是说事件不抱有约束力)

一声令下系统的主干元素

·命令(Command):实际上正是贯彻了ICommand接口的类,日常利用最多的是RoutedCommand类
·命令源(Command Source):达成了ICommandResource接口的类(Button)
·命令指标(Command Target):必需是促成了IInputCommand接口的类
·命令关联(Command Binding):肩负把外场逻辑与命令关联起来,比如实行从前对命令是不是能够试行进行决断、命令施行后还应该有什么后续专门的学问等

指令的选用

1.创制命令类

即获取一个完毕ICommand接口的类,假如命令与现实职业逻辑毫无干系,则运用WPF类库中的RoutedCommand就可以。即便想获得与业务逻辑相关的专有命令,则需求创制RoutedCommand(只怕ICommand)的派生类。

2.扬言命令实例

技术:一般景色下,只要求操作三个限令实例与之对应就能够。由在此以前后相继中的命令多应用单件形式(Singletone Pattern)以减小代码复杂度。

3.钦赐命令源

命令源具有命令和命令源四个属性。
同一个发令可以有三个源。
万一把命令指派给命令源,命令源就能受命令影响,命令不能进行的时候作为命令源的控件不可用。革命临官发送命令的章程不尽同样,举例单机双击。

4.点名命令目的

命令目的不是命令的天性而是命令源的性格。无论那些命令源是或不是享有核心都会收下那些命令。如果未有一些名命令目的,默觉稳妥前关键对象正是命令指标。

5.装置命令关联(命令绑定)

WPf供给CommandBinding在实行前扶掖判定是还是不是能够进行,在进行后做一些事变来“打扫战地”。命令指标向命令关联发送路由事件,命令关联捕捉并拍卖路由事件,向命令反馈信息。

1.ICommand接口富含四个措施和一个平地风波

Execute()方法蕴含应用程序逻辑(比如打字与印刷文书档案);
CanExecute()方法重临命令状态(命令可用重临true,不可用再次回到false);
CanExecuteChanged事件,命令状态改换时引发,那是提示非确定性信号,表示应该调用CanExecute()检查命令状态。

2.RoutedCommand类自动完毕ICommmand接口的类

不包涵别的应用程序逻辑,只象征命令。为事件冒泡和隧道增加了一些外加的功底结构

3.RoutedUICommand类传承自RoutedCommand类

用于全数文本的命令,只增添了Text属性

推行命令

RoutedUIIcommand类未有任何编码的职能,只表示命令。为触发命令,必要有命令源(也可应用代码)。为响应命令,须求有发号施令绑定,命令绑定将执行转发给普通的事件管理程序。

1.命令源

ICommandSource定义了四特性子:
·Command:指向连接的命令,必需
·CommandParameter:提供任何希望随命令发送的多少
·CommandTarget:鲜明将要当中奉行命令的因素
举个例子说:下边包车型大巴按键使用Command属性连接到ApplicationCommands.New命令:

<Button Command="ApplicationCommands.New">New</Button>
2.限令绑定

明确:
·当命令被触发时施行如何操作
·怎样规定命令是还是不是能被推行(可选)
·命令在何方起效果

指令实例:

概念三个下令,使用Button来发送这么些命令,当命令送达TextBox时,TextBox被清空(若无文字则不发送命令)
·分界面代码:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Command"
    Background="LightBlue" Height="350" Width="525">
<StackPanel x:Name="stackPanel">
    <Button x:Name="button1" Content="Send Command" Margin="5"/>
    <TextBox x:Name="textBoxA" Margin="5,0" Height="100"/>
</StackPanel>
</Window>

·后台代码:

//实现:定义一个命令,使用Button来发送这个命令,当命令送达TextBox时,TextBox被清空(如果没有文字则不发送命令)

namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        InitializeCommand();
    }
    //声明并定义命令
    private RoutedCommand clearCmd = new RoutedCommand("CLear", typeof(MainWindow));

    private void InitializeCommand()
    {
        //把命令赋值给命令源(发送者)并指定快捷键
        this.button1.Command = this.clearCmd;
        this.clearCmd.InputGestures.Add(new KeyGesture(Key.C, ModifierKeys.Alt));//按Alt+C键

        //指定命令目标
        this.button1.CommandTarget = this.textBoxA;

        //创建命令关联
        CommandBinding cb = new CommandBinding();
        cb.Command = this.clearCmd;//只关注与clearCmd相关的事件
        cb.CanExecute += new CanExecuteRoutedEventHandler(cb_CanExecute);
        cb.Executed +=new ExecutedRoutedEventHandler(cb_Executed);

        //把命令关联安置在外围控件上
        this.stackPanel.CommandBindings.Add(cb);
    }

    //当探测命令是否可以执行时,此方法被调用
    void cb_CanExecute(object sender, CanExecuteRoutedEventArgs e)
    {
        if(string.IsNullOrEmpty(this.textBoxA.Text))
        { e.CanExecute = false; }
        else
        { e.CanExecute = true; }

        //避免继续向上传而降低程序性能
        e.Handled = true;
    }

    //当命令送达目标后,此方法被调用
    void cb_Executed(object sender, ExecutedRoutedEventArgs e)
    {
        this.textBoxA.Clear();
        //避免继续向上传而降低程序性能
        e.Handled = true;
    }
}

解释:
·运维程序,在TextBox中输入文字后Button在指令可实长势况的状态下成为可用,此时单击Button也许按Alt+C键,TextBox都会被清空。
·RoutedCommand并不对命令指标做其余操作,而是由CommandBinding操作的。
·无论是探测命令是或不是举办可能命令送达目的,都会激发命令目的发送路由事件,这一个路由事件会沿着UI成分树向上传递并末了被CommandBinding所捕捉。
·CommandBinding棉被服装置在外边的StackPanel上,CommandBinding起三个侦听器的机能,並且特别针对clearCmd命令捕捉与其相关的路由事件。
·当CommandBinding捕捉到CanExecute事件,就能调用cb_CanExecute方法推断命令施行法规是或不是满足,并反映给命令供其震慑命令源的情状;当捕捉到Execute事件,表示命令的Execute方法已经实行了,或然说命令已经意义在了指令指标上(RoutedCommand只肩负让命令指标激发Executed),则调用Executed方法。
·CommandBingding一定要安装在命令目的的外界控件上,不然不可能捕捉到CanExecute和Executed等路由事件。

命令库

指令具备“一处证明,随地使用”的表征。便携的命令库包含:ApplicationCommands,ComponentCommands,NavigationCommands,MediaCommands,EditingCommands.都是静态类。举个例子大家得以一直拿命令库用那么些职业命令,不需求自个儿注脚:Open,Save,Play,Stop。(属于ApplicationCommand)

自定义Command

---------------------待更新

本文由云顶娱乐棋牌游戏发布于电脑单机下载,转载请注明出处:简单理解

关键词:

上一篇:没有了
下一篇:安师大怎么样