8
假设我正在使用以下接口(假设我们无法更改我们的实现以使其生效IObservable<T>
以及IProperty<T>
)。使用.NET Rx观察属性因Action事件而改变
public interface IProperty<T> {
T Value { get; set; }
event Action ValueChanged;
}
我想观察作为价值变动产生T
S中的集合。因为事件声明为Action
而不是标准的.NET事件模式,所以我不认为我可以使用Observable.FromEvent(...)
。
我已经想出了一个包装,似乎工作,但作为一个Rx新手,我敢肯定我错过了一些内置抽象(或者可能只是做错了整件事)。
有没有办法使用内置的Rx功能来做到这一点?如果不是,我的包装是否缺少任何明显的抽象,或者我应该采用完全不同的方法?
//Example wrapper
public class ObservableProperty<T> : IObservable<T> {
private readonly IProperty<T> _property;
public ObservableProperty(IProperty<T> property) { _property = property; }
public IDisposable Subscribe(IObserver<T> observer) {
Action action =() => observer.OnNext(_property.Value);
_property.ValueChanged += action;
return Disposable.Create(() => _property.ValueChanged -= action);
}
}
完美!谢谢一堆。现在为什么我无法弄清楚? :) – 2011-05-19 12:12:16
我的一个Rx指导方针是“从不直接实现IObservable或IObserver” - 这个限制有助于迫使我找到更简单的方法来构建api – 2011-05-19 12:28:18
考虑到可能会使用这种方法'property.FromMyEvent(。 ..)',我会命名方法'ToObservable',但除此之外,它看起来像我会做的。 – 2011-05-19 17:18:23