/// <summary> /// Removes a child from this object. /// </summary> /// <param name="child">The child to be removed from this parent.</param> public void RemoveChild(object child) { ITreeNode node = CreateNodeWrapper(child); // TODO: This might not remove correctly. if (!IsReadOnly) { if (m_children == null || (!m_children.Contains(node))) { return; } OnAboutToLoseChild?.Invoke(this, node); ((TreeNodeHelper)node).AboutToBeRemoved(((TreeNodeHelper)node)); m_children.Remove(node); if (m_autoIndex) { ITreeNodeProxy tnp = (ITreeNodeProxy)node; SimCore.IHasIdentity ihi = (SimCore.IHasIdentity)tnp.Ward; m_childFinder.Remove(ihi.Guid); } OnLostChild?.Invoke(this, node); ((TreeNodeHelper)node).WasRemoved(((TreeNodeHelper)node)); } else { ReadOnlyAccessViolation("RemoveChild"); } }
protected void _OnLostChild(TreeNodeHelper newChild) { OnLostChild?.Invoke(this, newChild); }