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;

      }

    }

  }