
/**
 * 子属性节点，用于注册 INotifyPropertyChanged
 */
export default class SubPropertyNode{
    constructor(){
        
        //#region public
        /**
         * @description 下级节点
         * @type Array<SubPropertyNode>
         */
        this.Children = [];

        /**
         * @description 下级节点
         * @type SubPropertyNode
         */
        this.Parent = null;

        /**
         * @description 节点名称
         *  正常情况，就是属性的Name;
         * 但，当为数组时， 它的下级就是数组的元素。 元素不是数组的属性。 元素的name为  $"[{序号}]"
         * @type string
         */
        this.Name = "";

        /**
         * @description 节点对象
         * @type object
         */
        this.Obj = null;

        /**
         * @description 对象的模板接口。默认就是 Obj.GetType()
         * @type prototype
         */
        this.InterfaceType = null;


        /**
         * @description 是数组
         * @type bool
         */
        this.IsArray = false;

        /**
         * @description 
         * @type PropertyChangedEventHandler
         */
        this.PropertyChanged = _PropertyChanged;


        /**
         * @description 
         * @type SubPropertyChangedEventHandler
         */
        this.SubPropertyChanged = null;
       //#endregion
    }
    
    _PropertyChanged(sender, e)
    {
        //处理[PropertyPush]重新注册问题
        COMMON.PropertyChanged_reInitPropertyPush(this, e);

        SubPropertyChanged?.Invoke(this, e);
    }

}