3.WPF命令(ICommad)

System.Windows.Input 命名空间

提供支持 Windows Presentation Foundation (WPF) 输入系统的类型。 其中包括用于鼠标、键盘和触笔设备的设备抽象类;公共输入管理器类;支持命令和自定义命令的类;以及各种实用工具类。

接口

ICommand

定义一个命令。

ICommand 接口

定义

命名空间:

System.Windows.Input

程序集:

System.ObjectModel.dll

方法一:

ICommand.CanExecute(Object) 方法

定义确定此命令是否可在其当前状态下执行的方法。

public bool CanExecute (object? parameter);

参数

parameter

Object

此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null

返回

Boolean

如果可执行此命令,则为 true;否则为 false

注解

通常,命令源在 CanExecute 引发 事件时调用 CanExecuteChanged 方法。

方法二:

ICommand.Execute(Object) 方法

定义在调用此命令时要调用的方法。

public void Execute (object? parameter);

参数

parameter

Object

此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null

活动:

ICommand.CanExecuteChanged 活动

当出现影响是否应执行该命令的更改时发生。

event EventHandler? CanExecuteChanged;

事件类型

EventHandler

注解

通常,发生此事件时 CanExecute ,命令源会调用 命令。

通常,如果命令无法执行,则命令源会自行禁用。

以下demo以及注解

<Window x:Class="_19ICommand.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:_19ICommand"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Height="30" Width="288" Command="{Binding ShowCommand}"></Button>
    </Grid>
</Window>

在后端进行上下文绑定

using System.Windows;

namespace _19ICommand
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            //DataContext 获取或设置元素参与数据绑定时的数据上下文。
            this.DataContext = new MainViewModel();
        }
    }
}

进行绑定以下逻辑 

using System.Windows;

namespace _19ICommand
{
    public class MainViewModel
    {
        public MainViewModel()
        {
            ShowCommand = new MyCommand(Show);//传输一个委托之间把方法传输进去
        }
        /// <summary>
        /// 这个命令负责传输一个show方法
        /// </summary>
        public MyCommand ShowCommand { get; set; }//负责UI与业务建立的一个关系
        /// <summary>
        /// 
        /// </summary>
        public void Show()
        {
            MessageBox.Show("点击了按钮");
        }
    }
}

传递方法进来,进行命令的绑定,根据委托来调用方法 

using System;
using System.Windows.Input;

namespace _19ICommand
{
    public class MyCommand : ICommand
    {

        Action executeAction;//创建一个内部接收委托
        /// <summary>
        /// 构造函数传输委托类型
        /// </summary>
        public MyCommand(Action action)
        {
            executeAction = action;//委托接收传输过来的方法
        }
        public event EventHandler CanExecuteChanged;

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public void Execute(object parameter)
        {
            //执行这个传输过来的委托
            executeAction();
        }
    }
}

ICommand的源代码

namespace System.Windows.Input
{
    //
    // 摘要:
    //     定义一个命令。
    [TypeConverter("System.Windows.Input.CommandConverter, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null")]
    [TypeForwardedFrom("PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
    [ValueSerializer("System.Windows.Input.CommandValueSerializer, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, Custom=null")]
    public interface ICommand
    {
        //
        // 摘要:
        //     当出现影响是否应执行该命令的更改时发生。
        event EventHandler CanExecuteChanged;

        //
        // 摘要:
        //     定义确定此命令是否可在其当前状态下执行的方法。
        //
        // 参数:
        //   parameter:
        //     此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null。
        //
        // 返回结果:
        //     如果可执行此命令,则为 true;否则为 false。
        bool CanExecute(object parameter);
        //
        // 摘要:
        //     定义在调用此命令时要调用的方法。
        //
        // 参数:
        //   parameter:
        //     此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null。
        void Execute(object parameter);
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值