2014-12-04 49 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);