我想獲取IdStream
的最新值,並在命令Execute
中使用它的操作。RX:如何將可觀察的最新值傳遞給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:
執行順序:
IdStream
創建- 命令創建
documentStream
過程DocumentOpened
事件(得到一些Id值 - 我檢查)saveCommand
執行
我該如何實現它?
UPD 2:我還需要等待命令體內的方法(例如,SaveAsync
)。
不幸的是,沒有(我嘗試了所有'做'和'訂閱'方法組合,有沒有'Take(1)')。我已經更新了描述,可能會提供更多信息。請注意,IdStream在執行開始時(如果不明顯)已經具有必要的值(不應該等待它)。 –
好吧我編輯了一個更大的例子,只是改變它使用重播,而不是我也錯過了語法和ReactiveCommand。你想使用CreateFromObservable,以便它啓動你傳遞的Observable –
這裏有一些很好的參考http://www.introtorx.com/content/v1.0.10621.0/02_KeyTypes.html#ReplaySubject http://www.introtorx .com/content/v1.0.10621.0/14_HotAndColdObservables.html#PublishLast –