public DataGridRowGroupInfo(
     DataGridCollectionViewGroup collectionViewGroup,
     bool isVisible,
     int level,
     int slot,
     int lastSubItemSlot)
 {
     CollectionViewGroup = collectionViewGroup;
     IsVisible           = isVisible;
     Level           = level;
     Slot            = slot;
     LastSubItemSlot = lastSubItemSlot;
 }
        private void GetParentGroupsContainingItemIndex(int index, out CollectionViewGroup[] parentGroups)
        {
            DataGridCollectionView collectionView = m_dataGridContext.ItemsSourceCollection as DataGridCollectionView;

            if (collectionView != null)
            {
                RawItem rawItem = collectionView.GetRawItemAt(index);
                List <CollectionViewGroup>  groupList   = new List <CollectionViewGroup>(16);
                DataGridCollectionViewGroup parentGroup = rawItem.ParentGroup;

                while ((parentGroup != null) && !(parentGroup is DataGridCollectionViewGroupRoot))
                {
                    groupList.Add(parentGroup);
                    parentGroup = parentGroup.Parent;
                }

                groupList.Reverse();
                parentGroups = groupList.ToArray();
            }
            else
            {
                CollectionView items = m_dataGridContext.Items;
                ReadOnlyObservableCollection <object> groups = items.Groups;

                if (groups != null)
                {
                    List <CollectionViewGroup> groupList = new List <CollectionViewGroup>(16);
                    this.GetParentGroupsContainingItemIndex(index, groups, groupList);
                    parentGroups = groupList.ToArray();
                }
                else
                {
                    parentGroups = new DataGridCollectionViewGroup[0];
                }
            }
        }
    private void GetParentGroupsContainingItemIndex( int index, out CollectionViewGroup[] parentGroups )
    {
      DataGridCollectionView collectionView = m_dataGridContext.ItemsSourceCollection as DataGridCollectionView;

      if( collectionView != null )
      {
        RawItem rawItem = collectionView.GetRawItemAt( index );
        List<CollectionViewGroup> groupList = new List<CollectionViewGroup>( 16 );
        DataGridCollectionViewGroup parentGroup = rawItem.ParentGroup;

        while( ( parentGroup != null ) && !( parentGroup is DataGridCollectionViewGroupRoot ) )
        {
          groupList.Add( parentGroup );
          parentGroup = parentGroup.Parent;
        }

        groupList.Reverse();
        parentGroups = groupList.ToArray();
      }
      else
      {
        CollectionView items = m_dataGridContext.Items;
        ReadOnlyObservableCollection<object> groups = items.Groups;

        if( groups != null )
        {
          List<CollectionViewGroup> groupList = new List<CollectionViewGroup>( 16 );
          this.GetParentGroupsContainingItemIndex( index, groups, groupList );
          parentGroups = groupList.ToArray();
        }
        else
        {
          parentGroups = new DataGridCollectionViewGroup[ 0 ];
        }
      }
    }