internal Group(
            GroupGeneratorNode node,
            CollectionViewGroup group,
            LateGroupLevelDescription groupLevelDescription,
            DataGridContext dataGridContext)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            if (group == null)
            {
                throw new ArgumentNullException("group");
            }

            if (groupLevelDescription == null)
            {
                throw new ArgumentNullException("groupLevelDescription");
            }

            if (dataGridContext == null)
            {
                throw new ArgumentNullException("dataGridContext");
            }

            m_collectionViewGroup = group;

            // Initialization is done through setters to register for events.
            this.DataGridContext       = dataGridContext;
            this.GeneratorNode         = node;
            this.GroupLevelDescription = groupLevelDescription;
        }
    internal Group(
      GroupGeneratorNode node,
      CollectionViewGroup group,
      LateGroupLevelDescription groupLevelDescription,
      DataGridContext dataGridContext )
    {
      if( node == null )
        throw new ArgumentNullException( "node" );

      if( group == null )
        throw new ArgumentNullException( "group" );

      if( groupLevelDescription == null )
        throw new ArgumentNullException( "groupLevelDescription" );

      if( dataGridContext == null )
        throw new ArgumentNullException( "dataGridContext" );

      m_collectionViewGroup = group;

      // Initialization is done through setters to register for events.
      this.DataGridContext = dataGridContext;
      this.GeneratorNode = node;
      this.GroupLevelDescription = groupLevelDescription;
    }
        private void UnregisterGroupLevelDescriptionEvent(LateGroupLevelDescription item)
        {
            if (item == null)
            {
                return;
            }

            item.PropertyChanged -= new PropertyChangedEventHandler(this.OnGroupLevelDescriptionChanged);
        }
        private void RegisterGroupLevelDescriptionEvent(LateGroupLevelDescription item, bool force)
        {
            if (item == null)
            {
                return;
            }

            lock (this.SyncRoot)
            {
                if (!force && (m_propertyChanged == null))
                {
                    return;
                }

                item.PropertyChanged += new PropertyChangedEventHandler(this.OnGroupLevelDescriptionChanged);
            }
        }
    private void UnregisterGroupLevelDescriptionEvent( LateGroupLevelDescription item )
    {
      if( item == null )
        return;

      item.PropertyChanged -= new PropertyChangedEventHandler( this.OnGroupLevelDescriptionChanged );
    }
    private void RegisterGroupLevelDescriptionEvent( LateGroupLevelDescription item, bool force )
    {
      if( item == null )
        return;

      lock( this.SyncRoot )
      {
        if( !force && ( m_propertyChanged == null ) )
          return;

        item.PropertyChanged += new PropertyChangedEventHandler( this.OnGroupLevelDescriptionChanged );
      }
    }