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