[转][C#][WPF]原生使用 ICommand

发布时间 2023-12-13 22:37:20作者: z5337

传参这里参考:https://www.cnblogs.com/zhlziliaoku/p/5867556.html

界面上添加一个按钮 

<Button Content="点击" Width="120" Height="31" Command="{Binding showCommand}" CommandParameter="{Binding RelativeSource={RelativeSource self}}"></Button>

也可以修改参数为:

<Button Content="点击" Width="120" Height="31" Command="{Binding showCommand}" CommandParameter="{Binding RelativeSource={RelativeSource AncestorType=Window}}"></Button>

后台代码,在构造函数里添加:

this.DataContext = new MainWindowModel();

在 MainWindowModel 类这样写:

public class MainWindowModel
{
    public MyCommand showCommand { get; set; }

    public MainWindowModel()
    {
        showCommand = new MyCommand(Show);
    }

    public void Show(object obj)
    {
        MessageBox.Show("点击了按钮!");
    }
}
MyCommand 的定义是:
public class MyCommand : ICommand
{
    Action<object> _action;
    public MyCommand(Action<object> action)
    {
        _action = action;
    }

    public event EventHandler CanExecuteChanged;

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

    public void Execute(object parameter)
    {
        _action(parameter);
    }
}

这样就完成了界面按钮与后台方法的关联,可以打断点看一下两个传参的区别(一个传参是按钮 ,一个传参是当前窗体)。