public void CleanGeneratorNode(GeneratorNode node)
        {
            HeadersFootersGeneratorNode headersFootersNode = node as HeadersFootersGeneratorNode;

            if (headersFootersNode != null)
            {
                this.CleanHeadersFootersNotification(headersFootersNode);
            }
            else
            {
                ItemsGeneratorNode itemsNode = node as ItemsGeneratorNode;
                if (itemsNode != null)
                {
                    this.UnregisterNodeCollectionChanged(( INotifyCollectionChanged )itemsNode.Items);
                    itemsNode.CollectionChanged -= m_itemsChangedHandler;
                }
                else
                {
                    GroupGeneratorNode groupNode = node as GroupGeneratorNode;
                    if (groupNode != null)
                    {
                        IList <object> subItems = groupNode.CollectionViewGroup.GetItems();

                        this.UnregisterNodeCollectionChanged(( INotifyCollectionChanged )subItems);

                        groupNode.CollectionChanged  -= m_groupsChangedHandler;
                        groupNode.IsExpandedChanging -= m_isExpandedChangingHandler;
                        groupNode.IsExpandedChanged  -= m_isExpandedChangedHandler;
                    }
                }
            }

            node.ExpansionStateChanged -= m_expansionStateChangedHandler;

            node.CleanGeneratorNode();
        }
    public void CleanGeneratorNode( GeneratorNode node )
    {
      HeadersFootersGeneratorNode headersFootersNode = node as HeadersFootersGeneratorNode;
      if( headersFootersNode != null )
      {
        this.CleanHeadersFootersNotification( headersFootersNode );
      }
      else
      {
        ItemsGeneratorNode itemsNode = node as ItemsGeneratorNode;
        if( itemsNode != null )
        {
          this.UnregisterNodeCollectionChanged( ( INotifyCollectionChanged )itemsNode.Items );
          itemsNode.CollectionChanged -= m_itemsChangedHandler;
        }
        else
        {
          GroupGeneratorNode groupNode = node as GroupGeneratorNode;
          if( groupNode != null )
          {
            IList<object> subItems = groupNode.CollectionViewGroup.GetItems();

            this.UnregisterNodeCollectionChanged( ( INotifyCollectionChanged )subItems );

            groupNode.CollectionChanged -= m_groupsChangedHandler;
            groupNode.IsExpandedChanging -= m_isExpandedChangingHandler;
            groupNode.IsExpandedChanged -= m_isExpandedChangedHandler;
          }
        }
      }

      node.ExpansionStateChanged -= m_expansionStateChangedHandler;

      node.CleanGeneratorNode();
    }