public WhereManyReactiveCollection(IReadOnlyReactiveCollection <T> source, Func <T, bool> filter, Func <T, IObservable <Unit> > filterChanged, IObservable <Unit> generalFilterChanged = null) { this.filter = filter; this.filterChanged = filterChanged; onAdd = source.ObserveAdd().Subscribe(@event => { OnAdd(@event.Value); }); onRemove = source.ObserveRemove().Subscribe(@event => { OnRemove(@event.Value); }); onReset = source.ObserveReset().Subscribe(_ => ClearItems()); onReset = source.ObserveReplace().Subscribe(@event => { OnRemove(@event.OldValue); OnAdd(@event.NewValue); }); if (generalFilterChanged != null) { generalFilterChangedBinding = generalFilterChanged.Subscribe(_ => { foreach (var element in source) { UpdateElement(element); } }); } foreach (var el in source) { OnAdd(el); } }
public static IObservable <Unit> AnyCollectionChangeAsObservable <T>(this IReadOnlyReactiveCollection <T> reactiveCollection) { return(Observable.Merge( reactiveCollection.ObserveReset().AsUnitObservable(), reactiveCollection.ObserveAdd().AsUnitObservable(), reactiveCollection.ObserveMove().AsUnitObservable(), reactiveCollection.ObserveRemove().AsUnitObservable(), reactiveCollection.ObserveReplace().AsUnitObservable())); }
public CollectionBinder(IReadOnlyReactiveCollection <T> source, BaseListItem <T> prefab, Transform parent) { this.source = source; this.prefab = prefab; this.parent = parent; prefab.gameObject.SetActive(false); onAdd = source.ObserveAdd().Subscribe(@event => UpdateCollection()); onMove = source.ObserveMove().Subscribe(@event => UpdateCollection()); onReset = source.ObserveReset().Subscribe(@event => UpdateCollection()); onRemove = source.ObserveRemove().Subscribe(@event => UpdateCollection()); onReplace = source.ObserveReplace().Subscribe(@event => UpdateCollection()); UpdateCollection(); }
public WhereReactiveCollection(IReadOnlyReactiveCollection <T> source, Func <T, bool> filter, IObservable <Unit> filterChanged) { this.filter = filter; onAdd = source.ObserveAdd().Subscribe(@event => { if (filter(@event.Value)) { Add(@event.Value); } }); onRemove = source.ObserveRemove().Subscribe(@event => { Remove(@event.Value); }); onReset = source.ObserveReset().Subscribe(_ => ClearItems()); onReset = source.ObserveReplace().Subscribe(@event => { Remove(@event.OldValue); if (filter(@event.NewValue)) { Add(@event.NewValue); } }); filterChanged.Subscribe(_ => { foreach (var element in source) { if (filter(element)) { if (!Contains(element)) { Add(element); } } else { Remove(element); } } }); }