猿问

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

我对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;



慕运维8079593
浏览 123回答 1
1回答
随时随地看视频慕课网APP
我要回答