我對Rx相當陌生,并嘗試解決以下情況。物品來自服務器,并帶有一組供應商。這些供應商之一將被提名為主要供應商。為了使它們在WPF中可編輯/可綁定,我創(chuàng)建了一些代理反應式對象,這些對象將對UI中的更改進行“反應”并重新計算一些數字。為了確保只有一個供應商可以成為主要供應商,我實現了以下代碼-該代碼使用一個主題來完成工作。我已經讀過主題可能是代碼的味道,我想知道我所做的是“正確的方法”還是可以采用一種更清潔的方法。public class VendorDto{ public string Name { get; set; } public bool IsPrimary { get; set; }}public class VendorProxy : ReactiveObject{ // INPC for Name and other properties. public bool IsPrimary => _isPrimary.Value; private readonly ObservableAsPropertyHelper<bool> _isPrimary; public ReactiveCommand<Unit, Unit> MakePrimary { get; } public VendorProxy(VendorDto dto, IObservable<VendorProxy> primaryVendors, Action<VendorProxy> makePrimary) { primaryVendors .DistinctUntilChanged() .Select(x => x == this) .ToProperty(this, x => x.IsPrimary, out _isPrimary); MakePrimary = ReactiveCommand.Create(() => makePrimary(this), canExecute: this.WhenAnyValue(x => x.IsPrimary, alreadyPrimary => !alreadyPrimary)); if (dto.IsPrimary) makePrimary(this); // set the initial value of IsPrimary. } // implements IEquality.}public class ItemProxy : ReactiveObject{ private ISubject<VendorProxy> PrimaryVendorSubject { get; } = new BehaviorSubject<VendorProxy>(null); public IObservable<VendorProxy> PrimaryVendorChanged => PrimaryVendorSubject; public ReactiveList<VendorProxy> Vendors { get; } public VendorProxy PrimaryVendor => _primaryVendor.Value; private readonly ObservableAsPropertyHelper<VendorProxy> _primaryVendor;
接收:創(chuàng)建無主題的可觀察對象
慕運維8079593
2021-04-09 17:19:42