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 :
실행 순서 :
IdStream
는documentStream
프로세스를DocumentOpened
이벤트 (일부 ID 값을 얻을 - 나는 그것을 확인)을 생성- 명령을 생성
saveCommand
실행
어떻게하면됩니까?
UPD 2 : 명령 본문 내부의 메소드 (예 : SaveAsync
)도 기다려야합니다.
불행히도, 아니요 ('Take (1)'의 유무에 상관없이'Do'와'Subscribe' 메서드 조합을 모두 시도했습니다). 설명을 업데이트했습니다. 아마도 더 많은 정보를 제공 할 것입니다. IdStream은 Execute가 시작될 때 (기다리지 말아야 함) 필요한 값을 이미 가지고 있습니다 (명확하지 않은 경우). –
괜찮아요. 더 큰 예제를 편집하고 대신 Replay를 사용하도록 변경했습니다. 또한 구문과 ReactiveCommand를 놓쳤습니다. Observable을 전달할 수 있도록 CreateFromObservable을 사용하려고합니다. –
다음은 좋은 참고 자료입니다. 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 –