2017-07-24 35 views
1

我有一个命令(ReactiveCommand),我想在用户选择列表中的一个项目时执行此命令。如何将ReactiveCommand与IObservable绑定?

一个列表暴露了一个可观察到的IObservable<object>所以每次有一个新的事件发送到这个可观察的我想执行我的命令。

我来了,但它看起来相当复杂。

source.ElementSelected 
    .Cast<Item>() 
    .SelectMany(ViewModel.ShowDetailsCommand.Execute) 
    .Subscribe(); 

我不知道是否有更好的方法来做到这一点?有没有类似BindCommand的命令和控件?

+1

https://docs.reactiveui.net/en/user-guide/commands/binding-commands.html滚动到底部“this.BindCommand( this.ViewModel, X => x.MyCommand, x => x.myControl, nameof(myControl.SomeEvent));“你在想什么? –

+0

@ShaneNeuville这不起作用,因为我没有一个事件。 –

+1

aw ok你有一个“事件”,但不是一个事件:-)。仔细阅读我明白你的意思。在这种情况下不确定: - /通常我会拥有你所拥有的,但使用WhenAnyObservable或类似的。 RxUI中的大多数示例也使用与将可观察元素链接到Execute中相似的语法。虽然invokeCommand也可以清理你有一点点。 https://docs.reactiveui.net/en/user-guide/commands/invoking-commands.html。否则,可能只需要制作自己的扩展方法。 –

回答

1

通常我会有你有什么,但使用WhenAnyObservable或类似。 RxUI中的大部分示例还使用类似的语法将可观察元素链接到Execute中。

虽然InvokeCommand是简化一点的一种方法。

https://reactiveui.net/docs/handbook/commands/invoking-commands

否则很可能只是需要使自己的扩展方法。

此外,我只是想确保指出

InvokeCommand尊重命令的可执行性。也就是说,如果 命令的CanExecute方法返回false,则当源observable ticks时,InvokeCommand不会执行命令 。

+1

您应该更新链接,因为它似乎已损坏。请改用https://reactiveui.net/docs/handbook/commands/invoking-commands –

相关问题