private void EntitiesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     if (e.Action == NotifyCollectionChangedAction.Reset)
     {
         foreach (var item in TargetConfig.Entities)
         {
             item.Parent.Remove(item);
             GlobalTrigger.OnRemoved(TargetConfig, item);
         }
         foreach (var item in TargetConfig.Entities)
         {
             GlobalTrigger.OnAdded(TargetConfig, item);
         }
         return;
     }
     if (e.NewItems != null)
     {
         foreach (EntityConfig item in e.NewItems)
         {
             GlobalTrigger.OnAdded(TargetConfig, item);
         }
     }
     if (e.OldItems == null)
     {
         return;
     }
     foreach (EntityConfig item in e.OldItems)
     {
         item.Parent.Remove(item);
         GlobalTrigger.OnRemoved(TargetConfig, item);
     }
 }
        private static void OnPropertiesCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
        {
            if (NotificationObject.IsLoadingMode || _inPropertiesCollectionChanged)
            {
                return;
            }
            var entity = sender as EntityConfig;

            if (entity == null)
            {
                return;
            }
            try
            {
                _inPropertiesCollectionChanged = true;

                if (!entity.IsModify)
                {
                    entity.IsModify = true;
                }

                switch (e.Action)
                {
                case NotifyCollectionChangedAction.Reset:
                    entity.LastProperties.Clear();
                    entity.LastProperties.AddRange(entity.Properties.Where(p => !p.Discard));
                    foreach (var property in entity.LastProperties)
                    {
                        property.StatusChanged += OnFieldStatusChanged;
                        GlobalTrigger.OnLoad(property);
                    }
                    return;
                }
                if (e.NewItems != null && e.NewItems.Count > 0)
                {
                    foreach (PropertyConfig property in e.NewItems)
                    {
                        property.Identity = ++entity.MaxIdentity;
                        property.Index    = entity.Properties.Max(p => p.Index) + 1;
                        entity.LastProperties.Add(property);
                        property.StatusChanged += OnFieldStatusChanged;
                        GlobalTrigger.OnAdded(entity, property);
                    }
                }
                if (e.OldItems != null && e.OldItems.Count > 0)
                {
                    foreach (PropertyConfig property in e.OldItems)
                    {
                        entity.LastProperties.Remove(property);
                        property.StatusChanged -= OnFieldStatusChanged;
                        GlobalTrigger.OnRemoved(entity, property);
                    }
                }
            }
            finally
            {
                _inPropertiesCollectionChanged = false;
            }
        }
 private void ConfigCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
 {
     if (e.Action == NotifyCollectionChangedAction.Reset)
     {
         OnLoad(TargetConfig);
         return;
     }
     if (e.NewItems != null)
     {
         foreach (ConfigBase item in e.NewItems)
         {
             GlobalTrigger.OnAdded(TargetConfig, item);
         }
     }
     if (e.OldItems == null)
     {
         return;
     }
     foreach (ConfigBase item in e.OldItems)
     {
         GlobalTrigger.OnRemoved(TargetConfig, item);
     }
 }