ReactiveCommand.Execute 不触发 IsExecuting

Jus*_*rst 3 reactiveui

我订阅了一个命令的 IsExecuting:

LoginCommand.IsExecuting.Subscribe(x => Log("Logging in"));
Run Code Online (Sandbox Code Playgroud)

当我的 Command 被 InvokeCommand 调用时它工作正常,但是当我通过以下方式调用它时:

LoginCommand.Execute();
Run Code Online (Sandbox Code Playgroud)

IsExecuting observable 不会被触发。

这有效:

Observable.Start(() => { }).InvokeCommand(LoginCommand);
Run Code Online (Sandbox Code Playgroud)

有人知道为什么调用 Execute 方法时 IsExecuting 属性没有改变吗?我正在尝试对命令进行单元测试,所以我认为这将是从测试中执行它的最佳方式。

pmb*_*nka 5

升级到ReactiveUI 7.0后,Execute()方法变了。现在它不会立即触发命令。相反,它会返回一个IObservable你必须订阅才能让事情发生的感冒。

LoginCommand.Execute().Subscribe();
Run Code Online (Sandbox Code Playgroud)

查看发行说明中有关 RxUI 7.0 更改的文章。Ctrl+F “ReactiveCommand 更好”。它明确指出:

ReactiveCommand 公开的 Execute 是反应性的(它返回 IObservable)。因此它很懒惰,除非有人订阅它,否则它不会做任何事情。