RelayCommandT

RelayCommand<T> 类似于 RelayCommand,但允许直接将对象传递给命令。它实现了 ICommand 接口,因此可用于绑定到 XAML 中的 Commands(例如,作为 Button 元素的 Command 属性)。然后,你可以使用 CommandParameter 属性将对象传递给命令。

XAML 示例:

<Button Command="{Binding MyCommand}" CommandParameter="{Binding MyModel}" />

构造函数有两个参数; 第一个是在调用 ICommand.Execute 时执行的 Action(例如用户点击按钮),第二个是 Func <string,bool>,它确定是否可以执行操作(默认为 true,调用 canExecute 在以下段落中)。基本结构如下:

public RelayCommand<string> MyCommand => new RelayCommand<string>(
    obj =>
    {
        //execute action
        Message = obj;
    },
    obj =>
    {
        //return true if button should be enabled or not
        return obj != "allowed";
    }
);

一些值得注意的影响:

  • 如果 canExecute 返回 false,将禁用该用户的 Button
  • 在真正执行操作之前,将再次检查 canExecute
  • 你可以致电 MyCommand.RaiseCanExecuteChanged(); 强制重新评估 canExecute Func