internal XmlElementListListener(XmlDocument doc, XmlElementList elemList) { _doc = doc; _elemList = new WeakReference(elemList); _nodeChangeHandler = new XmlNodeChangedEventHandler(this.OnListChanged); doc.NodeInserted += _nodeChangeHandler; doc.NodeRemoved += _nodeChangeHandler; }
private void OnListChanged(object sender, XmlNodeChangedEventArgs args) { lock (this) { if (_elemList != null) { XmlElementList el = (XmlElementList)_elemList.Target; if (null != el) { el.ConcurrencyCheck(args); } else { _doc.NodeInserted -= _nodeChangeHandler; _doc.NodeRemoved -= _nodeChangeHandler; _elemList = null; } } } }
public XmlEmptyElementListEnumerator(XmlElementList list) { }
private int _changeCount; //save the total number that the dom tree has been changed ( insertion and deletetion ) when this enumerator is created public XmlElementListEnumerator(XmlElementList list) { _list = list; _curElem = null; _changeCount = list.ChangeCount; }