Xceed Toolkit Plus for WPF v5.0 Documentation
In This Topic
    Creating a group-configuration selector
    In This Topic

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