Xceed DataGrid for WPF v7.2 Documentation
Creating a group-configuration selector

The following example demonstrates how to create a custom group-configuration selector that will return the appropriate group configuration depending on the number of items in a group. The implementation of the ItemCountGroupConfigurationSelector is provided below.

XAML
Copy Code
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid">
  <Grid.Resources>
    <xcdg:DataGridCollectionViewSource x:Key="cvs_orders"
                                       Source="{Binding Source={x:Static Application.Current},
                                                        Path=Orders}">
      <xcdg:DataGridCollectionViewSource.GroupDescriptions>              
        <xcdg:DataGridGroupDescription PropertyName="ShipCity" />
      </xcdg:DataGridCollectionViewSource.GroupDescriptions>
    </xcdg:DataGridCollectionViewSource>
  </Grid.Resources>
  <xcdg:DataGridControl x:Name="OrdersGrid"
                        ItemsSource="{Binding Source={StaticResource cvs_orders}}">
    <xcdg:DataGridControl.GroupConfigurationSelector>
      <local:ItemCountGroupConfigurationSelector MinItemCount="10" />
    </xcdg:DataGridControl.GroupConfigurationSelector>
  </xcdg:DataGridControl>
</Grid>
VB.NET
Copy Code
Dim collectionView As New DataGridCollectionView( Orders )
collectionView.GroupDescriptions.Add( New DataGridGroupDescription( "ShipCity" ) )
dataGridControl.GroupConfigurationSelector = New ItemCountGroupConfigurationSelector( 10 )
dataGridControl.ItemsSource = collectionView
C#
Copy Code
DataGridCollectionView collectionView = new DataGridCollectionView( Orders );      
collectionView.GroupDescriptions.Add( new DataGridGroupDescription( "ShipCity" ) );
dataGridControl.GroupConfigurationSelector = new ItemCountGroupConfigurationSelector( 10 );
dataGridControl.ItemsSource = collectionView;

The following code provides the implementation of the ItemCountGroupConfigurationSelector. 

VB.NET
Copy Code
  Public Class ItemCountGroupConfigurationSelector
               Inherits GroupConfigurationSelector
    Public Sub New
    End Sub
    Public Sub New( minItemCount As Integer )
       Me.MinItemCount = minItemCount
    End Sub
    Public Overrides Function SelectGroupConfiguration( ByVal groupLevel As Integer, _
                    ByVal collectionViewGroup As System.Windows.Data.CollectionViewGroup, _
                    ByVal groupDescription As System.ComponentModel.GroupDescription ) As GroupConfiguration
      If collectionViewGroup Is Nothing Then
        Return MyBase.SelectGroupConfiguration( groupLevel, collectionViewGroup, groupDescription )
      End If
      Dim groupConfiguration As New GroupConfiguration()
      Dim style As New Style( GetType( Xceed.Wpf.DataGrid.DataRow ) )
      If collectionViewGroup.ItemCount <= m_minItemCount Then ' red
        style.Setters.Add( New Setter( Xceed.Wpf.DataGrid.DataRow.BackgroundProperty, Brushes.Red ) )
      Else ' green
        style.Setters.Add( New Setter( Xceed.Wpf.DataGrid.DataRow.BackgroundProperty, Brushes.LightGreen ) )
      End If
      groupConfiguration.ItemContainerStyle = style
      Return groupConfiguration
    End Function
    Private m_minItemCount As Integer = 0
    Public Property MinItemCount As Integer
      Get
        Return m_minItemCount
      End Get
      Set
        m_minItemCount = value
    End Property
  End Class
C#
Copy Code
 public class ItemCountGroupConfigurationSelector : GroupConfigurationSelector
  {
    public ItemCountGroupConfigurationSelector()
    {
    } 
    public ItemCountGroupConfigurationSelector( int minItemCount )
     :base()
    {
       this.MinItemCount = minItemCount;
    } 
   public override GroupConfiguration SelectGroupConfiguration( int groupLevel,
                   System.Windows.Data.CollectionViewGroup collectionViewGroup,
                   System.ComponentModel.GroupDescription groupDescription )
   {
     if( collectionViewGroup == null )
       return base.SelectGroupConfiguration( groupLevel, collectionViewGroup, groupDescription );
     GroupConfiguration groupConfiguration = new GroupConfiguration();
     Style style = new Style( typeof( Xceed.Wpf.DataGrid.DataRow ) );
     if( collectionViewGroup.ItemCount <= m_minItemCount ) // red
     {
       style.Setters.Add( new Setter( Xceed.Wpf.DataGrid.DataRow.BackgroundProperty, Brushes.Red ) );       
     }
     else // green
     {
       style.Setters.Add( new Setter( Xceed.Wpf.DataGrid.DataRow.BackgroundProperty, Brushes.LightGreen ) );       
     }
     groupConfiguration.ItemContainerStyle = style;
     return groupConfiguration;
   }
    private int m_minItemCount = 0;
    public int MinItemCount
    {
      get
      {
        return m_minItemCount;
      }
      set
      {
        if( value != m_minItemCount )
          m_minItemCount = value;
      }
    }
  }