コード例 #1
0
        public Function(IWeakEvent[] changeTriggers, object target, Func <object, TV> getter)
        {
            Contract.AllIsNotNull(changeTriggers, target, getter);
            _receiver = new EventReceiver(OnTrigger);
            foreach (var trig in changeTriggers)
            {
                trig.AddReceiver(_receiver);
            }

            _target = new WeakReference(target, false);
            _getter = getter;
        }
コード例 #2
0
ファイル: ReadonlyCollection.cs プロジェクト: ganouver/gdk
        public WrapperCollection(WeakObservableCollection <T> src)
        {
            _coll    = src;
            _updater = new EventReceiver <NotifyCollectionChangedEventArgs>(
                coll_CollectionChanged);

            _propertyUpdater = new EventReceiver <PropertyChangedEventArgs>(
                coll_PropertyChanged);

            _coll.ContentChanged.AddReceiver(_updater);
            _coll.PropertyValueChanged.AddReceiver(_propertyUpdater);
        }
コード例 #3
0
        public AutoConvertCollection(IReadOnlyCollection <T1> source, Func <T1, T2> converter, bool IsDistinct)
        {
            Contract.IsNotNull(source);
            Contract.IsNotNull(converter);
            _converter  = converter;
            _src        = source;
            _IsDistinct = IsDistinct;

            ReloadAll();

            _adder   = new EventReceiver <ObjectEventArgs>((x, y) => this.Add((T1)y.Arg));
            _remover = new EventReceiver <ObjectEventArgs>((x, y) => this.Remove((T1)y.Arg));
            _reset   = new EventReceiver((x, y) => this.ReloadAll());

            _src.Added.AddReceiver(_adder);
            _src.Removed.AddReceiver(_remover);
            _src.Reset.AddReceiver(_reset);
        }
コード例 #4
0
ファイル: UnionCollection.cs プロジェクト: ganouver/gdk
        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();
        }
コード例 #5
0
ファイル: TestCollections.cs プロジェクト: ganouver/gdk
        public void test_WrapperCollection()
        {
            NotifyCollectionChangedAction lastAction = NotifyCollectionChangedAction.Reset;
            object lastAdd = null;
            object lastRemove = null;
            int changeCounter = 0;
            EventReceiver onAdd = new EventReceiver((x, y) => lastAdd = ((ObjectEventArgs)y).Arg),
                onRemove = new EventReceiver((x, y) => lastRemove = ((ObjectEventArgs)y).Arg),
                onChange = new EventReceiver((x, y) => ++changeCounter);

            var targetColl = new WeakObservableCollection<string>();
            var wcoll = new WrapperCollection<string>(targetColl);

            wcoll.Added.AddReceiver(onAdd);
            wcoll.Removed.AddReceiver(onRemove);
            wcoll.Changed.AddReceiver(onChange);
            wcoll.CollectionChanged += (x, y) => { lastAction = y.Action; };

            string t1 = "aaa", t2 = "bbb";

            CompareWrap(targetColl, wcoll, t1, t2);
            Assert.AreEqual(0, changeCounter);

            targetColl.Add(t1);
            CompareWrap(targetColl, wcoll, t1, t2);
            Assert.AreEqual(1, changeCounter);
            Assert.AreEqual(t1, lastAdd);
            Assert.AreEqual(NotifyCollectionChangedAction.Add, lastAction);

            targetColl.Add(t2);
            CompareWrap(targetColl, wcoll, t1, t2);
            Assert.AreEqual(2, changeCounter);
            Assert.AreEqual(t2, lastAdd);
            Assert.AreEqual(NotifyCollectionChangedAction.Add, lastAction);

            targetColl.Remove(t1);
            CompareWrap(targetColl, wcoll, t1, t2);
            Assert.AreEqual(3, changeCounter);
            Assert.AreEqual(t1, lastRemove);
            Assert.AreEqual(NotifyCollectionChangedAction.Remove, lastAction);

            Assert.AreEqual(targetColl.Count, wcoll.Count);
        }
コード例 #6
0
ファイル: WeakEvents.cs プロジェクト: ganouver/gdk
 public sampleListener()
 {
     _sampleEventReceiver = new EventReceiver(OnSampleEvent);
 }
コード例 #7
0
ファイル: WeakEvents.cs プロジェクト: ganouver/gdk
 public sampleListener()
 {
     _sampleEventReceiver = new EventReceiver(OnSampleEvent);
 }
コード例 #8
0
ファイル: CompoundTrigger.cs プロジェクト: ganouver/gdk
 private CompoundWeakEvent()
 {
     _evt    = new WeakEvent(this);
     trigger = new EventReceiver((x, y) => _evt.Raise(y));
 }