Dav*_*pak 8 .net c# system.reactive
假设我使用以下界面(假设我们不能改变我们的实现以使其IObservable<T>成为一样IProperty<T>).
public interface IProperty<T> {
T Value { get; set; }
event Action ValueChanged;
}
Run Code Online (Sandbox Code Playgroud)
我试图观察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);
}
}
Run Code Online (Sandbox Code Playgroud)
Sco*_*ein 11
这应该这样做:
public static class RxExt
{
public static IObservable<T> FromMyEvent<T>(this IProperty<T> src)
{
return System.Reactive.Linq.Observable.Create<T>((obs) =>
{
Action eh = () => obs.OnNext(src.Value);
src.ValueChanged += eh;
return () => src.ValueChanged -= eh;
});
}
}
Run Code Online (Sandbox Code Playgroud)