Скажем, я использую следующий интерфейс (предположим, что мы не можем изменить нашу реализацию, чтобы сделать ее IObservable<T>
, а также IProperty<T>
).
public interface IProperty<T> {
T Value { get; set; }
event Action ValueChanged;
}
Я пытаюсь наблюдать за коллекциейT
с генерируется при изменении значения.Поскольку событие объявлено как 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);
}
}