예제 #1
0
        /// <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);
            }));
        }
예제 #2
0
        /// <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);
                }
            }));
        }