public override IEnumerable <DataElement> EnumerateAllElements(List <DataElement> knownParents) { if (Count == 0) { // Mutation might have erased all of our children if (origionalElement == null) { yield break; } // First our origionalElement yield return(origionalElement); // Next our origionalElement element's children foreach (var item in origionalElement.EnumerateAllElements(knownParents)) { yield return(item); } } else { // Default to our base to enumerate array elements foreach (var item in base.EnumerateAllElements(knownParents)) { yield return(item); } } }
public void UpdateBindings(DataElement oldElem) { var oldParent = oldElem.parent; var newParent = this.parent; oldElem.parent = null; this.parent = null; UpdateBindings(oldElem, oldElem); foreach (var elem in oldElem.EnumerateAllElements()) { UpdateBindings(oldElem, elem); } oldElem.parent = oldParent; this.parent = newParent; }