System.Windows.Input 命名空间
提供支持 Windows Presentation Foundation (WPF) 输入系统的类型。 其中包括用于鼠标、键盘和触笔设备的设备抽象类;公共输入管理器类;支持命令和自定义命令的类;以及各种实用工具类。
接口
ICommand | 定义一个命令。 |
ICommand 接口
定义
命名空间:
程序集:
System.ObjectModel.dll
方法一:
ICommand.CanExecute(Object) 方法
定义确定此命令是否可在其当前状态下执行的方法。
public bool CanExecute (object? parameter);
参数
parameter
此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null
。
返回
如果可执行此命令,则为 true
;否则为 false
。
注解
通常,命令源在 CanExecute 引发 事件时调用 CanExecuteChanged 方法。
方法二:
ICommand.Execute(Object) 方法
定义在调用此命令时要调用的方法。
public void Execute (object? parameter);
参数
parameter
此命令使用的数据。 如果此命令不需要传递数据,则该对象可以设置为 null
。
活动:
ICommand.CanExecuteChanged 活动
当出现影响是否应执行该命令的更改时发生。
event EventHandler? CanExecuteChanged;
事件类型
注解
通常,发生此事件时 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);
}
}