public void AddNodeCodon(TypeBinderTreeViewNodeCodon codon)
        {
            if (_binderTreeViewNodeCodons.Contains(codon))
            {
                Debug.Assert(false, "_binderTreeViewNodeCodons 重复添加:" + codon.ToString());
                return;
            }

            Debug.Assert(GetNodeCodon(codon.DataBoundType) == null,
                         "_binderTreeViewNodeCodons 重复添加类型:" + codon.ToString());

            _binderTreeViewNodeCodons.Add(codon);
        }
        /// <summary>
        /// 创建一个树节点
        /// </summary>
        /// <param name="dataBoundItem"></param>
        /// <returns></returns>
        private ITypeBinderTreeViewNode CreateNode(object dataBoundItem)
        {
            ITypeBinderTreeViewNode node = (ITypeBinderTreeViewNode)Activator.CreateInstance(this.NodeType);

            node.DataBoundItem = dataBoundItem;
            TypeBinderTreeViewNodeCodon codon = GetNodeCodon(dataBoundItem.GetType());

            if (codon != null)
            {
                node.Codon = codon;
                //这里有个漏洞,一旦把绑定到 dataBoundItem 的节点移动到另外一个节点下,其实际 OwnerList 就已经发生了改变
                //所以不能在创建节点时一次写死
                //node.OwnerList = ownerList;
                DataBind(node);
            }
            return(node);
        }