コード例 #1
0
 /// <summary>
 /// Performs actions after a reference's target DOM node has been removed; the
 /// default behavior is to remove the node from its parent</summary>
 /// <param name="e">Event args describing reference</param>
 protected virtual void OnReferentRemoved(ReferenceEventArgs e)
 {
     // check if node has been removed already; this can happen if it
     //  has multiple referents that have been removed
     DomNode parent = e.Owner.Parent;
     if (parent != null)
     {
         // remove node from parent
         e.Owner.RemoveFromParent();
     }
 }
コード例 #2
0
 /// <summary>
 /// Performs actions after a reference to an external DOM node is removed</summary>
 /// <param name="e">Event args describing reference</param>
 protected virtual void OnExternalReferenceRemoved(ReferenceEventArgs e)
 {
     ExternalReferenceRemoved.Raise(this, e);
 }
コード例 #3
0
 /// <summary>
 /// Performs actions after a reference to an external DOM node is added</summary>
 /// <param name="e">Event args describing reference</param>
 protected virtual void OnExternalReferenceAdded(ReferenceEventArgs e)
 {
 }
コード例 #4
0
        /// <summary>
        /// Performs custom actions on validation Ending events</summary>
        /// <param name="sender">Validation context</param>
        /// <param name="e">Event args</param>
        protected override void OnEnding(object sender, EventArgs e)
        {
            if (Suspended)
                return;

            while (m_removed.Count > 0)
            {
                // get a snapshot of the removed nodes, so we can clear the set, as dangling
                //  reference handling may result in cascading removals
                DomNode[] removedNodes = m_removed.ToArray();
                m_removed.Clear();

                // update all dangling references to removed node
                foreach (DomNode removedNode in removedNodes)
                {
                    List<Pair<DomNode, AttributeInfo>> referenceList;
                    if (m_nodeReferenceLists.TryGetValue(removedNode, out referenceList))
                    {
                        foreach (Pair<DomNode, AttributeInfo> pair in referenceList.ToArray()) // copy, as list may be modified
                        {
                            ReferenceEventArgs args = new ReferenceEventArgs(pair.First, pair.Second, removedNode);
                            ReferentRemoved.Raise(this, args);
                            OnReferentRemoved(args);
                        }

                        // remove the list of references to  the removed node
                        m_nodeReferenceLists.Remove(removedNode);
                    }
                }
            }
        }
コード例 #5
0
 /// <summary>
 /// Performs actions after a reference to an external DOM node is removed</summary>
 /// <param name="e">Event args describing reference</param>
 protected virtual void OnExternalReferenceRemoved(ReferenceEventArgs e)
 {
     ExternalReferenceRemoved.Raise(this, e);
 }
コード例 #6
0
 /// <summary>
 /// Performs actions after a reference to an external DOM node is added</summary>
 /// <param name="e">Event args describing reference</param>
 protected virtual void OnExternalReferenceAdded(ReferenceEventArgs e)
 {
 }
コード例 #7
0
        // removes refs from the tracker, and reports removed external refs
        private void RemoveReference(DomNode owner, AttributeInfo attributeInfo, DomNode target)
        {
            List<Pair<DomNode, AttributeInfo>> referenceList;
            if (m_nodeReferenceLists.TryGetValue(target, out referenceList))
            {
                referenceList.Remove(new Pair<DomNode, AttributeInfo>(owner, attributeInfo));
                if (referenceList.Count == 0)
                {
                    m_nodeReferenceLists.Remove(target);
                }
            }

            // if target's root isn't the context's root, then it's an external reference
            //  that is being removed.
            DomNode targetRoot = target.GetRoot();
            if (DomNode != targetRoot)
            {
                ReferenceEventArgs e = new ReferenceEventArgs(owner, attributeInfo, target);
                OnExternalReferenceRemoved(e);
                ExternalReferenceRemoved.Raise(this, e);
            }
        }
コード例 #8
0
        // adds refs to the tracker, and reports added external refs
        private void AddReference(DomNode owner, AttributeInfo attributeInfo, DomNode target)
        {
            List<Pair<DomNode, AttributeInfo>> referenceList;
            if (!m_nodeReferenceLists.TryGetValue(target, out referenceList))
            {
                referenceList = new List<Pair<DomNode, AttributeInfo>>();
                m_nodeReferenceLists.Add(target, referenceList);
            }
            referenceList.Add(new Pair<DomNode, AttributeInfo>(owner, attributeInfo));

            // if target's root isn't the context's root, then it's an external reference
            //  that is being added.
            DomNode targetRoot = target.GetRoot();
            if (DomNode != targetRoot)
            {
                ReferenceEventArgs e = new ReferenceEventArgs(owner, attributeInfo, target);
                OnExternalReferenceAdded(e);
                ExternalReferenceAdded.Raise(this, e);

            }
        }