我在我的代码中使用 ReactiveProperty 库,有时我需要将两个ReactiveProperty<T>
连接在一起以保持属性数据同步。例如,通过将ReactivePropertySlim
服务类中的 a组合到ReactiveProperty
ViewModel 类中的 a 。
通常我使用下一个代码:
// NewProperty is a ViewModel public property
NewProperty = service.Property.ToReactiveProperty<T>();
var propertyDisposable = NewProperty.Subscribe(value => service.Property.Value = value);
对于单个属性来说,查找并不是那么糟糕,但是当数字变高时,代码就会到达。
现在我使用一个简单的扩展方法来限制代码重复。
public static (IReactiveProperty<T> property, IDisposable cleanup) AttachReactiveProperty<T>(this IReactiveProperty<T> baseProperty)
{
var newProperty = baseProperty.ToReactiveProperty<T>();
var cleanup = newProperty.Subscribe(value => baseProperty.Value = value);
return (newProperty, cleanup);
}
我以一个属性变量和一个 IDisposable 变量结束来管理取消订阅。
var (pausedProperty, pausedDisposable) = remoteConversion.Paused.AttachReactiveProperty();
NewProperty = pausedProperty;
目前,该扩展正在做他的工作(我认为代码较少且清晰)。但是有没有更好的方法来解决这个问题。