IdStream
の最新の値を取得し、それをコマンドExecute
のアクションに使用したいとします。RX:ObservableからReactiveCommandに最新の値を渡す方法
public IObservable<Option<Guid>> IdStream { get; }
IdStream = documentStream.OfType<DocumentOpened().Select(x => x.Document.Id.Some())
.Merge(documentStream.OfType<DocumentClosed().Select(x => Option<Guid>.None()));
var saveCommand = ReactiveCommand.Create(() => Save(id), CanExecute);
私は答えhttps://stackoverflow.com/a/31168822/7779560を使用しようと、このような何か持っていた:
var saveCommand = ReactiveCommand.Create(() => { }, CanExecute);
saveCommand.WithLatestFrom(IdStream, (_, id) => id)
.Subscribe(id => Save(id));
をそして、それは動作しますが、私は(この場合にはIsExecutingとThrownExceptionsコマンドの機能を使用することはできません彼らコマンド作成中にExecuteとして渡した空のアクションに対してのみ動作します)。
UPD:
実行順序:
documentStream
プロセスDocumentOpened
イベント(いくつかのID値を取得する - 私はそれをチェックする)を作成IdStream
saveCommand
実行 を
どうすれば実現できますか?
UPD 2:コマンド本体内のメソッド(例えば、SaveAsync
)も待つ必要があります。
残念ながら、いいえ(私はDoと 'Subscribe'メソッドの組み合わせに' Take(1) 'の有無にかかわらず)しようとしました。私は説明を更新しました、おそらくもっと情報を与えるでしょう。 IdStreamは、 'Execute'が開始されたとき(それが明白でなかった場合)、必要な値をすでに持っています(待ちません)。 –
大丈夫私は大きな例で編集し、代わりにリプレイを使用するように変更しました。また、構文とReactiveCommandが欠落していました。 Observableを渡すようにCreateFromObservableを使用したい場合 –
ここにいくつかの参考文献があります。http://www.intro.com/jp/content/v1.0.10621.0/02_KeyTypes.html#ReplaySubject http://www.introtorx .com/content/v1.0.10621.0/14_HotAndColdObservables.html#PublishLast –