2014-12-04 46 views
0

我创建了类似于默认RelayCommand实现的东西。它接受:如何将功能插入继电器命令?

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

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

public Boolean Active { get; set;} 

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

现在我不知道为什么这种失败,类型检查?

RelayCommand(somethingunrelated, checkProperty(Active)); 

谢谢!

+0

在Haskell,如果我有一个功能,那就是'Func键<布尔,布尔>'我放入一个'布尔',它变成'Func '。为什么接受一个参数后它认为它仍然是'Func '? – Snowflake 2014-12-04 08:15:39

+0

我不明白这一点。可以作为单独的问题发布或进一步阐述。 – 2014-12-04 14:09:10

回答

3

您正在定义一个Func,其中一个输入为bool value return bool。

Func<Boolean, Boolean> checkProperty 

但是你RelayCommand构造器需要它没有输入参数函数求委托。只返回类型bool的值。它改成这样:

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

编辑:

至于建议由Alex Joukovsky,使用Predicate<bool>其具有更好的语义。见this MSDN link

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

我建议使用'Predicate '而不是'Func ' – 2014-12-04 08:04:32

0

你的函数必须像

bool checkProperty() 
{ 
    return Actcive; 
} 

然后你可以使用

RelayCommand(somethingunrelated, checkProperty);