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