/// <summary> /// Observes collectionchanged events for <paramref name="source"/>. /// </summary> public static IObservable <NotifyCollectionChangedEventArgs> ObserveCollectionChangedSlim( this INotifyCollectionChanged source, bool signalInitial) { if (signalInitial) { return(Observable.Return(CachedEventArgs.NotifyCollectionReset) .Concat(source.ObserveCollectionChangedSlim(signalInitial: false))); } return(Observable.Create <NotifyCollectionChangedEventArgs>(o => { NotifyCollectionChangedEventHandler handler = (_, e) => o.OnNext(e); source.CollectionChanged += handler; return Disposable.Create(() => source.CollectionChanged -= handler); })); }
/// <summary> /// Observes collection changed events for <paramref name="source"/>. /// </summary> /// <param name="source">The source collection.</param> /// <param name="signalInitial">When true a reset is signaled on subscribe.</param> /// <returns>An <see cref="IObservable{NotifyCollectionChangedEventArgs}"/>.</returns> public static IObservable <NotifyCollectionChangedEventArgs> ObserveCollectionChangedSlim(this INotifyCollectionChanged source, bool signalInitial) { if (source is null) { throw new ArgumentNullException(nameof(source)); } if (signalInitial) { return(Observable.Return(CachedEventArgs.NotifyCollectionReset) .Concat(source.ObserveCollectionChangedSlim(signalInitial: false))); } return(Observable.Create <NotifyCollectionChangedEventArgs>(o => { source.CollectionChanged += Handler; return Disposable.Create(() => source.CollectionChanged -= Handler); void Handler(object _, NotifyCollectionChangedEventArgs e) { o.OnNext(e); } })); }