Ejemplo n.º 1
0
        public static CompositeDisposable TrackChanges <T>(this IReactiveList <T> list, Action <T> add, Action <T> remove,
                                                           Action <ICollection <T> > reset, Func <T, bool> filter = null)
        {
            if (list == null)
            {
                throw new ArgumentNullException(nameof(list));
            }
            var disposables = new CompositeDisposable();

            if (add != null)
            {
                var o = list.ItemsAdded;
                if (filter != null)
                {
                    o = o.Where(filter);
                }
                disposables.Add(o.Subscribe(add));
            }
            if (remove != null)
            {
                var o = list.ItemsRemoved;
                if (filter != null)
                {
                    o = o.Where(filter);
                }
                disposables.Add(o.Subscribe(remove));
            }
            if (reset != null)
            {
                disposables.Add(list.ShouldReset
                                .Subscribe(x => reset(filter == null ? list.ToArray() : list.Where(filter).ToArray())));
            }

            return(disposables);
        }