[英]Rx how to combine command with another observable
我有许多反应式命令以及一些具有某些信息的可观察对象,并且我正在尝试执行以下操作:
_navigate = ReactiveCommand.Create(CanNavigate);
_navigate.CombineLatest(navigationTarget, (_, tgt) => tgt)
.Subscribe(tgt => Navigation.NavigateTo(tgt));
我尝试了几种不同的方法:
SelectMany
Zip
我要么以:
本质上我想要:
一个可观察的对象,每次(且仅 )在执行命令时触发,并拉入第二个可观察的对象的最新值。
无法完全了解如何最好地实现这一目标...
如果您能够使用预发行版本,则最新的(2.3.0-beta2)具有方法WithLatestFrom
可以完全WithLatestFrom
这一点。
_navigate.WithLatestFrom(navigationTarget, (_, tgt) => tgt)
.Subscribe(tgt => Navigation.NavigateTo(tgt));
如果没有,您可以通过以下方式创建自己的:
public static IObservable<TResult> WithLatestFrom<TLeft, TRight, TResult>(
this IObservable<TLeft> source,
IObservable<TRight> other,
Func<TLeft, TRight, TResult> resultSelector)
{
return source.Publish(os =>
other.Select(a => os
.Select(b => resultSelector(b,a)))
.Switch());
}
我们使用Join实现此行为。
这个想法是在一个时刻,你有一个window
的navigtion target
并没有窗口_navigate
命令。 当出现命令时,它将从另一个序列的当前打开的窗口中获取值。 当新的navigationTarget
到达时, navigationTarget
值的窗口关闭。
_navigate.Join(
navigationTarget,
_ => Observable.Empty<Unit>(),
_ => navigationTarget,
(_, tgt) => tgt).Subscribe(tgt => Navigation.NavigateTo(tgt));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.