示例#1
0
        public UnionCollection(IReadOnlyCollection <T1> source, Expander <T1, T2> expander)
        {
            Contract.IsNotNull(source);
            Contract.IsNotNull(expander);

            _expander = expander;
            _src      = source;

            _addSource    = new EventReceiver <ObjectEventArgs>((x, y) => this.OnAdd((T1)y.Arg));
            _removeSource = new EventReceiver <ObjectEventArgs>((x, y) => OnRemove((T1)y.Arg));
            _resetSource  = new EventReceiver((x, y) => ReloadAll());

            _addItem    = new EventReceiver <ObjectEventArgs>((x, y) => this.OnAddItem((T2)y.Arg));
            _removeItem = new EventReceiver <ObjectEventArgs>((x, y) => this.OnRemoveItem((T2)y.Arg));
            _resetItems = new EventReceiver((x, y) => ResetSource((IReadOnlyCollection <T2>)x));

            _src.Added.AddReceiver(_addSource);
            _src.Removed.AddReceiver(_removeSource);
            _src.Reset.AddReceiver(_resetSource);

            _resetSource.Ping();
        }