protected void OnNodeChildrenChanged(NodeChildrenChangedArgs <TNode> args)
        {
            EventHandler <NodeChildrenChangedArgs <TNode> > handler = NodeChildrenChanged;

            if (handler != null)
            {
                handler(this, args);
            }
        }
 private void m_parent_NodeChildrenChanged(object sender, NodeChildrenChangedArgs <T> args)
 {
     if (args.Parent.Equals(this.m_item))
     {
         if (args.Action == NotifyCollectionChangedAction.Add)
         {
             Debug.Assert(!m_children.Contains(m_parent[args.Child]));
             m_children.Add(m_parent[args.Child]);
         }
         else if (args.Action == NotifyCollectionChangedAction.Remove)
         {
             Debug.Assert(m_children.Contains(m_parent[args.Child]));
             m_children.Remove(m_parent[args.Child]);
         }
         else
         {
             throw new InvalidOperationException();
         }
     }
     else
     {
         Debug.Assert(args.Parent != null);
     }
 }