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); }