protected override void RestoringVisit(DataGridContext sourceContext, CollectionViewGroup group, object[] namesTree, int groupLevel, bool isExpanded, bool isComputedExpanded)
        {
            if (sourceContext != m_rootDataGridContext)
            {
                throw new InvalidOperationException("Group does not belong to the root DataGridContext.");
            }

            if (groupLevel > m_maxGroupLevel)
            {
                return;
            }

            GroupNamesTreeKey groupNamesTreeKey = new GroupNamesTreeKey(namesTree);

            bool wasExpanded;

            if (m_groupsStateDictionary.TryGetValue(groupNamesTreeKey, out wasExpanded))
            {
                if (wasExpanded)
                {
                    sourceContext.ExpandGroupCore(group, true);
                }
                else
                {
                    sourceContext.CollapseGroupCore(group, true);
                }
            }
            else if (m_stopAtFirstCollapsedGroup)
            {
                sourceContext.CollapseGroupCore(group, true);
            }
        }
    protected override void RestoringVisit( DataGridContext sourceContext, CollectionViewGroup group, object[] namesTree, int groupLevel, bool isExpanded, bool isComputedExpanded )
    {
      if( sourceContext != m_rootDataGridContext )
        throw new InvalidOperationException( "Group does not belong to the root DataGridContext." );

      if( groupLevel > m_maxGroupLevel )
        return;

      GroupNamesTreeKey groupNamesTreeKey = new GroupNamesTreeKey( namesTree );

      bool wasExpanded;
      if( m_groupsStateDictionary.TryGetValue( groupNamesTreeKey, out wasExpanded ) )
      {
        if( wasExpanded )
        {
          sourceContext.ExpandGroupCore( group, true );
        }
        else
        {
          sourceContext.CollapseGroupCore( group, true );
        }
      }
      else if( m_stopAtFirstCollapsedGroup )
      {
        sourceContext.CollapseGroupCore( group, true );
      }
    }