我对Rx相当陌生,并尝试解决以下情况。物品来自服务器,并带有一组供应商。这些供应商之一将被提名为主要供应商。为了使它们在WPF中可编辑/可绑定,我创建了一些代理反应式对象,这些对象将对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;
1 回答
- 1 回答
- 0 关注
- 122 浏览
添加回答
举报
0/150
提交
取消