为了账号安全,请及时绑定邮箱和手机立即绑定

接收:创建无主题的可观察对象

接收:创建无主题的可观察对象

C#
慕运维8079593 2021-04-09 17:19:42
我对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
提交
取消
意见反馈 帮助中心 APP下载
官方微信