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);
            }
        }
Esempio n. 2
0
        /// <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;
        }