3. 命Command 简单明了(待更新)3. 令Command 简单了解(待更新)

by admin on 2018年10月5日

命令(Command)

命令(Command)

2018/1/10 19:06:35

命令可以约代码,还足以约步骤逻辑。(事件之打算是颁布和传唱有信,对如何响应事件非做规定,每个接收者可以动用好的所作所为来响应事件。也就是说事件未具约束力)

2018/1/10 19:06:35

一声令下可以约代码,还可以约步骤逻辑。(事件的打算是宣布与扩散有信息,对哪些响应事件无做规定,每个接收者可以采用自己之行为来响应事件。也就是说事件不负有约束力)

指令系统的中心因素

·命令(Command):实际上就是促成了ICommand接口的类似,平时使用最多的凡RoutedCommand类
·命令源(Command Source):实现了ICommandResource接口的类(Button)
·命令目标(Command Target):必须是兑现了IInputCommand接口的类
·命令关联(Command
Binding):负责将外场逻辑与命令关联起来,比如执行前对命令是否足以实施进行判断、命令执行后还有什么样后续工作等

命令系统的中心因素

·命令(Command):实际上就是落实了ICommand接口的类似,平时动最多的凡RoutedCommand类
·命令源(Command Source):实现了ICommandResource接口的类(Button)
·命令目标(Command Target):必须是促成了IInputCommand接口的类似
·命令关联(Command
Binding):负责把外围逻辑与命令关联起来,比如执行前对命令是否可实施进行判定、命令执行后还有什么后续工作相当

命的采用

命的施用

1.创立命令类

纵使得到一个兑现ICommand接口的类,如果命令和具象事务逻辑无关,则采用WPF类库中的RoutedCommand即可。如果想获取与作业逻辑相关的专有命令,则要创造RoutedCommand(或者ICommand)的派生类。

1.创造命令类

就算取得一个落实ICommand接口的接近,如果命令和现实事务逻辑无关,则运用WPF类库中的RoutedCommand即可。如果想抱同工作逻辑相关的专有命令,则要创造RoutedCommand(或者ICommand)的派生类。

2.声明命令实例

技巧:一般情况下,只待操作一个指令实例与的对许即可。因此先后中之指令多利用单件模式(Singletone
Pattern)以调减代码复杂度。

2.声明命令实例

技术:一般景象下,只待操作一个命实例与之对承诺即可。因此次中的指令多采用单件模式(Singletone
Pattern)以压缩代码复杂度。

3.指定命令源

命令源拥有命令和命令源两个属性。
暨一个令可以产生差不多只来。
苟将命指派给命令源,命令源就会见吃命令影响,命令不可知行之时光作为命令源的控件不可用。革命临官发送命令的方不尽相同,例如单机双击。

3.点名命令源

命令源拥有命令和命令源两只特性亚洲必赢手机。
和一个命令可以起多单自。
倘若把命指派给命令源,命令源就见面被命令影响,命令不克尽之上作为命令源的控件不可用。革命临官发送命令的点子不尽相同,例如单机双击。

4.指定命令目标

命目标不是命令的性而是命令源的性。无论这个命令源是否享有焦点都见面吸纳这令。如果没有点名命令目标,默认为当前问题对象就是令目标。

4.点名命令目标

命令目标不是命令的习性而是命令源的习性。无论这个命令源是否具有焦点都见面接受这个令。如果没有点名命令目标,默认为当前热点对象就是令目标。

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

WPf需要CommandBinding在尽前帮助判断是无是足以尽,在推行后开有风波来“打扫战场”。命令目标为命令关联发送路由于事件,命令关联捕捉并拍卖路由事件,向命令反馈信息。

5.安命令关联(命令绑定)

WPf需要CommandBinding在执行前拉判断是不是得履,在实践后召开有轩然大波来“打扫战场”。命令目标为命令关联发送路由于事件,命令关联捕捉并处理路由事件,向命令反馈消息。

1.ICommand接口包含两个方式以及一个事件

Execute()方法包含应用程序逻辑(例如打印文档);
CanExecute()方法返回命令状态(命令可用返回true,不可用返回false);
CanExecuteChanged事件,命令状态改变时引发,这是指示信号,表示应当调用CanExecute()检查命令状态。

1.ICommand接口包含两个法子以及一个事变

Execute()方法包含应用程序逻辑(例如打印文档);
CanExecute()方法返回命令状态(命令可用返回true,不可用返回false);
CanExecuteChanged事件,命令状态改变时引发,这是指示信号,表示应该调用CanExecute()检查命令状态。

2.RoutedCommand类自动实现ICommmand接口的类

切莫含有其他应用程序逻辑,只表示命令。为事件冒泡和隧道添加了一些格外的底蕴结构

2.RoutedCommand类自动实现ICommmand接口的类

勿分包其他应用程序逻辑,只表示命令。为事件冒泡和隧道添加了一部分额外的基本功结构

3.RoutedUICommand类继承自RoutedCommand类

用来所有文本的吩咐,只多了Text属性

3.RoutedUICommand类继承自RoutedCommand类

用于所有文本的命令,只增了Text属性

执行命令

RoutedUIIcommand类没有外编码的作用,只表示命令。为点命令,需要来命令源(也不过下代码)。为响应命令,需要发发号施令绑定,命令绑定以推行转发给一般的事件处理程序。

执行命令

RoutedUIIcommand类没有其他编码的力量,只表示命令。为点命令,需要发出命令源(也不过下代码)。为响应命令,需要有指令绑定,命令绑定以实行转发让一般的事件处理程序。

1.命令源

ICommandSource定义了三独属性:
·Command:指向连接的授命,必需
·CommandParameter:提供任何想以命令发送的多寡
·CommandTarget:确定以在其中执行命令的因素
比如:下面的按钮使用Command属性连接到ApplicationCommands.New命令:

<Button Command="ApplicationCommands.New">New</Button>
1.命令源

ICommandSource定义了三单特性:
·Command:指向连接的命,必需
·CommandParameter:提供任何想以命令发送的数量
·CommandTarget:确定将于其中执行命令的要素
譬如:下面的按钮使用Command属性连接至ApplicationCommands.New命令:

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

明确:
·当令于触发时执行什么操作
·如何确定命令是否能够给执行(可选)
·命令在哪里起作用

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等行程由于事件。

命实例:

概念一个令,使用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)

命令库

一声令下具有“一地处声明,处处以”的风味。便带的命令库包括:ApplicationCommands,ComponentCommands,NavigationCommands,MediaCommands,EditingCommands.都是静态类。例如我们好直接以命令库用这些专业命令,不需好声明:Open,Save,Play,Stop。(属于ApplicationCommand)

自定义Command

———————待更新

自定义Command

———————待更新

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图