public TreeChangeEventArgs(
     EntityTreeEventTiming enTiming,
     EntityTreeChangeInfo oChangeInfo)
 {
     this.Timing     = enTiming;
     this.ChangeInfo = oChangeInfo;
 }
 public void PostTreeChange(EntityTreeChangeInfo oChangeInfo)
 {
     TreeChangeNotify(
         EntityTreeEventTiming.PostChange,
         oChangeInfo
         );
 }
 private void PreTreeChange(EntityTreeChangeInfo oChangeInfo)
 {
     TreeChangeNotify(
         EntityTreeEventTiming.PreChange,
         oChangeInfo
         );
 }
 private void FireTreeChangeEvent(
     EntityTreeEventTiming enTiming,
     EntityTreeChangeInfo oChangeInfo)
 {
     if (this.OnTreeChange != null)
     {
         OnTreeChange(
             new TreeChangeEventArgs(enTiming, oChangeInfo)
             );
     }
 }
            public AutoTreeChangeNotify(
                IEntityBase oTarget,
                EntityTreeChange enChange,
                IEntityBase oParentEntity,
                IEntityBase oChildEntity,
                EntityRelation enParentChildRelation,
                object oAdditionalInfo)
            {
                m_oTarget = oTarget;

                m_oChangeInfo = m_oTarget.PreTreeChange(
                    enChange,
                    oParentEntity,
                    oChildEntity,
                    enParentChildRelation,
                    oAdditionalInfo);
            }
        public EntityTreeChangeInfo PostTreeChange(
            EntityTreeChange enChange,
            IEntityBase oParentEntity,
            IEntityBase oChildEntity,
            EntityRelation enParentChildRelation,
            object oAdditionalInfo)
        {
            EntityTreeChangeInfo oChangeInfo = new EntityTreeChangeInfo(
                enChange,
                oParentEntity,
                oChildEntity,
                enParentChildRelation,
                oAdditionalInfo);

            PostTreeChange(oChangeInfo);

            return(oChangeInfo);
        }
        public virtual void TreeChangeNotify(
            EntityTreeEventTiming enTiming,
            EntityTreeChangeInfo oChangeInfo)
        {
            // Fire event
            FireTreeChangeEvent(
                enTiming,
                oChangeInfo);

            // Call 'Template method' event
            OnTreeChangeHandler(
                enTiming,
                oChangeInfo);

            IEntityBase oParent = OwnerParent as IEntityBase;

            if (oParent != null)
            {
                // Notify parent
                oParent.TreeChangeNotify(
                    enTiming,
                    oChangeInfo);
            }
        }
 // May be overriden in inherited entities
 protected virtual void OnTreeChangeHandler(
     EntityTreeEventTiming enTiming,
     EntityTreeChangeInfo oChangeInfo)
 {
 }