public TreeChangeEventArgs(
     EntityTreeEventTiming enTiming,
     EntityTreeChangeInfo oChangeInfo)
 {
     this.Timing     = enTiming;
     this.ChangeInfo = oChangeInfo;
 }
 private void FireTreeChangeEvent(
     EntityTreeEventTiming enTiming,
     EntityTreeChangeInfo oChangeInfo)
 {
     if (this.OnTreeChange != null)
     {
         OnTreeChange(
             new TreeChangeEventArgs(enTiming, 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)
 {
 }