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); }