private void TargetOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs args) { switch (args.Action) { case NotifyCollectionChangedAction.Add: if (args.NewItems != null) { foreach (var item in args.NewItems) { AddItem(sender, item); } } else { throw new Exception("NewItems was null"); } break; case NotifyCollectionChangedAction.Remove: if (args.OldItems != null) { foreach (var item in args.OldItems) { RemoveItem(sender, item); } } else { throw new Exception("OldItems was null"); } break; case NotifyCollectionChangedAction.Move: case NotifyCollectionChangedAction.Replace: case NotifyCollectionChangedAction.Reset: ExtendedPropertyChanged?.Invoke(sender, new ExtendedPropertyChangedEventArgs("Item", null, null)); break; default: throw new ArgumentOutOfRangeException(); } }
public void InitialRegisterValue(Type type) { if (_property.DeclaringType != type) { return; } //if (ExtendedPropertyChanged == null) return; if (_target.GetType().GetProperty(Name).GetMethod != _property.GetMethod) { return; } var value = _property.GetValue(_target); var oldValue = Interlocked.Exchange(ref _value, value); if (ReferenceEquals(oldValue, value)) { return; } ExtendedPropertyChanged?.Invoke(_target, new ExtendedPropertyChangedEventArgs(Name, oldValue, _value)); }
private void RemoveItem(object sender, object item) { ExtendedPropertyChanged?.Invoke(sender, new ExtendedPropertyChangedEventArgs("Item", item, null)); }