2
也許我失去了一些東西,但是我無法獲得ReactiveCommand來阻止基於canExecute observable的執行。ReactiveCommand不尊重canExecute
下面是我能夠想到的最簡單的例子。我希望命令永遠不會開火,但它是。
我錯過了什麼?
void Main()
{
var canExecute = Observable.Return(false);
var myCommand = ReactiveCommand.CreateAsyncTask(canExecute, m => functions.doAllThings(m));
myCommand.Subscribe(x=>"executing".Dump());
myCommand.Execute("Tom"); // This fires the command. I would have expected it to block
}
static class functions
{
public static Task doAllThings(object message)
{
var result = Task.Run(() =>{
"running task...".Dump();
return "hello " + (string)message;});
return result;
}
}
注 - 這是一個問題是從Executing a command from another command'叉'種。我相信這更是核心問題。
艾哈 - 感謝保羅。這不是我所期望的。我必須承認,我仍然不知道自己在做什麼......但是我每天都在學習:-) – 2014-09-03 09:26:18
這同樣適用於您自己的ICommand實現。通常情況下,沒有人會像if(!CanExecute(null)return;在Execute方法內執行任何操作,當你可以執行時,你只希望被調用 – 0xBADF00D 2015-07-30 11:45:15
@ 0xBADF00D我必須誠實,這種行爲引起了我的警惕,同樣的_does not_適用於我自己的'ICommand'實現,如果兩個方法完全獨立運行,我不會在將'CanExecute'和'Excute'行爲封裝到'ICommand'對象中看到太多價值。我可能只是將這兩種方法放到我的ViewModel中,而省去了不必要的抽象,我使用了一個命令,因爲我不相信調用者不會做一些愚蠢的事情。 – 2016-02-26 19:50:05