internal static SelectionRange GetRange(this CollectionViewGroup collectionViewGroup, DataGridContext dataGridContext)
        {
            int startIndex = -1;
            int endIndex   = -1;

            DataGridVirtualizingCollectionViewGroupBase dataGridVirtualizingCollectionViewGroupBase = collectionViewGroup as DataGridVirtualizingCollectionViewGroupBase;
            DataGridCollectionViewGroup dataGridCollectionViewGroup = collectionViewGroup as DataGridCollectionViewGroup;

            if (dataGridVirtualizingCollectionViewGroupBase != null)
            {
                startIndex = dataGridVirtualizingCollectionViewGroupBase.StartGlobalIndex;
                endIndex   = startIndex + dataGridVirtualizingCollectionViewGroupBase.VirtualItemCount - 1;
            }
            else if (dataGridCollectionViewGroup != null)
            {
                startIndex = dataGridCollectionViewGroup.GetFirstRawItemGlobalSortedIndex();
                endIndex   = startIndex + dataGridCollectionViewGroup.GlobalRawItemCount - 1;
            }
            else if (collectionViewGroup.ItemCount > 0)
            {
                if (dataGridContext == null)
                {
                    throw new DataGridInternalException("This collectionViewGroup require a DataGridContext instance");
                }

                var firstItem = collectionViewGroup.GetFirstLeafItem();
                var lastItem  = collectionViewGroup.GetLastLeafItem();

                if (firstItem != null && lastItem != null)
                {
                    startIndex = dataGridContext.Items.IndexOf(firstItem);
                    endIndex   = dataGridContext.Items.IndexOf(lastItem);
                }
            }

            return((startIndex >= 0) && (startIndex <= endIndex)
        ? new SelectionRange(startIndex, endIndex)
        : SelectionRange.Empty);
        }