public static IDisposable connect_item_hooks <T>(ObservableCollection <T> source, Func <T, IDisposable> get_item_hook, bool clear_source_on_dispose = false) { var item_hooks = source.Select(get_item_hook).ToList(); return(new CompositeDisposable( clear_source_on_dispose ? Disposable.Create(source.Clear) : Disposable.wrap_collection(item_hooks), source.Subscribe((s, e) => CollectionHelper.reflect_change(item_hooks, source, get_item_hook, d => d.Dispose(), e)))); }
public static IDisposable connect_item_hooks <T>(IReadOnlyObservableCollection <T> source, Func <T, IDisposable> get_item_hook) { var item_hooks = source.Select(get_item_hook).ToList(); return(new CompositeDisposable( Disposable.wrap_collection(item_hooks), source.Subscribe((s, e) => CollectionHelper.reflect_change(item_hooks, source, get_item_hook, d => d.Dispose(), e)))); }