当前位置:健康减肥瘦身 > 美容护肤 > 轻便易行明了

轻便易行明了

文章作者:美容护肤 上传时间:2019-12-04

命令(Command)

2018/1/10 19:06:35

命令能够约束代码,还足以限制步骤逻辑。(事件的意义是揭露和传颂一些音讯,对怎么着响应事件不做规定,每一种接收者能够接纳自个儿的行事来响应事件。也便是说事件不具备节制力)

一声令下系统的中央因素

·命令(Command):实际上正是落实了ICommand接口的类,平常采用最多的是RoutedCommand类
·命令源(Command Source卡塔尔(英语:State of Qatar):实现了ICommandResource接口的类(Button卡塔尔国
·命令指标(Command Target卡塔尔(英语:State of Qatar):必需是完结了IInputCommand接口的类
·命令关联(Command Binding卡塔尔国:担负把外场逻辑与命令关联起来,举例实践以前对命令是不是能够进行举办剖断、命令实践后万幸似何后续专门的职业等

一声令下的应用

1.创办命令类

即拿到三个落实ICommand接口的类,借职务令与具象业务逻辑非亲非故,则利用WPF类库中的RoutedCommand就可以。要是想赢得与工作逻辑相关的专有命令,则须要创制RoutedCommand(恐怕ICommand)的派生类。

2.声称命令实例

技艺:日常情形下,只须求操作一个指令实例与之对应就能够。由早前后相继中的命令多选拔单件方式(Singletone Pattern)以减掉代码复杂度。

3.钦点命令源

命令源具备命令和命令源两本天性。
同叁个命令可以有八个源。
大器晚成旦把命令指使给命令源,命令源就能够受命令影响,命令不能够实施的时候作为命令源的控件不可用。革命临官发送命令的诀窍不尽相近,举个例子单机双击。

4.点名命令目的

一声令下目的不是命令的质量而是命令源的性质。无论那一个命令源是或不是具有核心都会收取那一个命令。若无一些名命令指标,默以为当前主题对象正是命令指标。

5.安装命令关联(命令绑定卡塔尔

WPf要求CommandBinding在施行前扶掖判定是否足以推行,在执行后做一些事件来“打扫沙场”。命令目的向命令关联发送路由事件,命令关联捕捉并拍卖路由事件,向命令反馈新闻。

1.ICommand接口包蕴五个措施和八个风浪

Execute(卡塔尔(英语:State of Qatar)方法包罗应用程序逻辑(举例打字与印刷文档);
CanExecute(卡塔尔(英语:State of Qatar)方法再次回到命令状态(命令可用重临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

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

本文由健康减肥瘦身发布于美容护肤,转载请注明出处:轻便易行明了

关键词: