簡體   English   中英

ReactiveUI:如何從ReactiveCommand取消可觀察對象?

[英]ReactiveUI: How to cancel an Observable from a ReactiveCommand?

我有以下內容:

Compress = this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();
var process = Compress.RegisterAsync(ConvertImages);
var subscription = process.Subscribe(x => Images.Remove(x));

CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();
CancelConversion.RegisterAsyncAction();

其中ConvertImages(object o)是ViewModel的私有方法,該方法又在服務類中調用並返回ConvertImages(IEnumerable<ImageDto> images) ,該服務類將調整圖像的大小並壓縮並返回IObservable<ImageDto>

Paul Betts建議在此處通過使用IObservable的實現來實現取消,例如使用Observable.create ,那么有人可以舉例說明如何實現這種Observable嗎?

還有RxUI™發出取消信號的方式是什么? 我應該subscription.Dispose()CancelConversion.RegisterAsyncAction() 我應該將.TakeUntil(CancelConversion.Execution_Signaled)添加到var process ,如何確定“ CancelConversion.Execution_Signaled”?

這很簡單:

CancelConversion = this.WhenAnyValue(x => x.ImagesCount, x => x.IsBusy, (count, busy) => count > 0 && busy).ToCommand();

this.WhenAnyValue(x => x.ImagesCount, x => x > 0).ToCommand();

var process = Compress.RegisterAsync(x => ConvertImages().TakeUntil(CancelConversion));
var subscription = process.Subscribe(x => Images.Remove(x));

處理實際取消(即停止ConvertImages實際所做的任何工作)取決於您對ConvertImages的實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM