public ModelEnumerableNode(IEnumerable value) { this.value = value; if (this.value is INotifyCollectionChanged) { ((INotifyCollectionChanged)this.value).CollectionChanged += WeakDelegate.Connect <ModelEnumerableNode, INotifyCollectionChanged, NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>( this, (INotifyCollectionChanged)this.value, (target, sender, eventargs) => target.CollectionChanged(sender, eventargs), (source, handler) => source.CollectionChanged -= handler); } }
private PropertyNode(INotifyPropertyChanged owner, PropertyInfo propertyInfo) { this.owner = owner; this.propertyInfo = propertyInfo; this.owner.PropertyChanged += WeakDelegate.Connect <PropertyNode, INotifyPropertyChanged, PropertyChangedEventHandler, PropertyChangedEventArgs>( this, this.owner, (target, sender, eventargs) => target.OnPropertyChanged(sender, eventargs), (source, handler) => source.PropertyChanged -= handler); if (this.owner is INotifyDataErrorInfo) { ((INotifyDataErrorInfo)this.owner).ErrorsChanged += WeakDelegate.Connect <PropertyNode, INotifyDataErrorInfo, DataErrorsChangedEventArgs>( this, (INotifyDataErrorInfo)this.owner, (target, sender, eventargs) => target.OnErrorsChanged(eventargs), (source, handler) => source.ErrorsChanged -= handler); } this.UpdateNode(); this.validationSeverityAdapter = this.CreatePropertyAdapter( nameof(this.ValidationSeverity), () => this.ValidationResults.DefaultIfEmpty(new ValidationMessage(ValidationSeverity.None, "")).Max(message => message.Severity) ); }