如何将功能插入到继电器命令中?

时间:2014-12-04 07:57:50

标签: c# lambda typechecking

我创建了类似于默认RelayCommand实现的东西。它接受:

public RelayCommand(
    Action executeMethod,
    Func<bool> canExecuteMethod,
)

现在假设我编写了一个带有属性并将其转换为bool的命令。假设:

public Boolean Active { get; set;}

Func<Boolean, Boolean> checkProperty = x => x;

现在我想知道为什么这会因类型检查而失败?

RelayCommand(somethingunrelated, checkProperty(Active));

谢谢!

2 个答案:

答案 0 :(得分:3)

您正在定义Func,其中一个输入bool值返回bool。

Func<Boolean, Boolean> checkProperty

但是你的RelayCommand构造函数接受一个没有输入参数的Func委托。只返回bool类型的值。将其更改为:

public RelayCommand(
    Action executeMethod,
    Func<bool,bool> canExecuteMethod,
)

编辑:

根据Alex Joukovsky的建议,使用具有更好语义的Predicate<bool>。见this MSDN link

public RelayCommand(
        Action executeMethod,
        Predicate<bool> canExecuteMethod,
    )

答案 1 :(得分:0)

你的功能必须像

bool checkProperty()
{
    return Actcive;
}

然后你可以使用

RelayCommand(somethingunrelated, checkProperty);