private void UpdateNotifiers() { if (notifier_default == null) { notifier_default = new NestedPropertyChangedNotifier <T>(PropertyBindingDepth); } if (notifiers == null) { notifiers = new Dictionary <T, NestedPropertyChangedNotifier <T> >(); } else { foreach (var n in notifiers) { n.Value.PropertyChanged -= Item_PropertyChanged; } notifiers.Clear(); } foreach (T item in base.Items) { AddPropertyChangedNotifier(item); } }
/// <summary> /// Private copy constructor. Used by <see cref="CreateNew" />. /// </summary> private NestedPropertyChangedNotifier(NestedPropertyChangedNotifier <T> copyFrom, T obj) { CascadeNotifications = copyFrom.CascadeNotifications; depth = copyFrom.depth; properties = new Dictionary <string, NestedPropertyDescriptor>(copyFrom.properties); notifiers = new Dictionary <string, InnerNotifier>(); var npcPds = properties.Select(p => p.Value).Where(npd => typeof(INotifyPropertyChanged).IsAssignableFrom(npd.PropertyType) && npd.PropertyDepth != depth); foreach (var npd in npcPds) { var notifier = new InnerNotifier(npd); notifiers[npd.Name] = notifier; notifier.PropertyChanged += NestedPropertyChanged; } Object = obj; }