A collection of CellValidationRules containing the validation rules against which the content of the cells contained in the column are validated before they exit edit mode.
Remarks
When the value of a cell fails the validation process, its HasValidationError property will return true and its ValidationError property will contain a CellValidationError, which provides information on the cell in error, the error content, the exception (if one was thrown), and the validation rule that failed. If the validation rule that failed is a binding-level ValidationRule, it will be wrapped in a PassthroughCellValidationRule. Validation errors will also be reported by a row when the value of one or more of its cells fails the validation process. Like cells, when a row contains validation errors, its HasValidationError property will return true and its ValidationError property will contain a RowValidationError, which provides information on the row in error, the error content, the exception, and the validation rule that failed.
Example
All examples in this topic assume that the grid is bound to a list of Composer objects, unless stated otherwise.
The following example demonstrates how to create a custom CellValidationRule and add it to a column's CellValidationRules collection to provide UI-level validation
<Gridxmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid"xmlns:local="clr-namespace:Xceed.Wpf.Documentation"><Grid.Resources><xcdg:DataGridCollectionViewSourcex:Key="cvs_composers"Source="{Binding Source={x:Static Application.Current},
Path=Composers}"/><!--A data provider to bind to the Period enum--><ObjectDataProviderx:Key="periods"MethodName="GetValues"ObjectType="{x:Type local:Period}"><ObjectDataProvider.MethodParameters><x:TypeTypeName="local:Period"/></ObjectDataProvider.MethodParameters></ObjectDataProvider><!--A cell editor that will be used to edit a Period column with a combo box--><xcdg:CellEditorx:Key="periodEditor"><xcdg:CellEditor.EditTemplate><DataTemplate><ComboBoxBorderThickness="0"MinHeight="22"VerticalContentAlignment="Top"SelectedValuePath="."ItemsSource="{Binding Source={StaticResource periods}}"SelectedValue="{xcdg:CellEditorBinding}"><ComboBox.Resources><StyleTargetType="Popup"><SetterProperty="TextElement.Foreground"Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/></Style></ComboBox.Resources></ComboBox></DataTemplate></xcdg:CellEditor.EditTemplate></xcdg:CellEditor></Grid.Resources><xcdg:DataGridControlItemsSource="{Binding Source={StaticResource cvs_composers}}"UpdateSourceTrigger="RowEndingEdit"><xcdg:DataGridControl.Columns><xcdg:ColumnFieldName="Period"CellEditor="{StaticResource periodEditor}"><xcdg:Column.CellValidationRules><local:PeriodVSCompositionCountCellValidationRule/></xcdg:Column.CellValidationRules></xcdg:Column><xcdg:ColumnFieldName="CompositionCount"><xcdg:Column.CellValidationRules><local:PeriodVSCompositionCountCellValidationRule/></xcdg:Column.CellValidationRules></xcdg:Column></xcdg:DataGridControl.Columns></xcdg:DataGridControl></Grid>
Implementation of the PeriodVSCompositionCountCellValidationRule validation rule. Implementation of the Person class can be found in the Validating Data topic.
Imports System
Imports Xceed.Wpf.DataGrid.ValidationRules
Imports Xceed.Wpf.DataGrid
Imports System.Globalization
Imports System.Windows.Controls
Namespace Xceed.Wpf.Documentation
PublicClass PeriodVSCompositionCountCellValidationRule
Inherits CellValidationRule
PublicOverridesFunction Validate( ByVal value AsObject, ByVal culture As CultureInfo, _
ByVal context As CellValidationContext ) As ValidationResult
Dim parentRow As Row = context.Cell.ParentRow
Dim compositionCount AsIntegerDim period As Period
If context.Cell.FieldName = "Period"Then
period = CType( value, Period )
compositionCount = CInt( parentRow.Cells( "CompositionCount" ).Content )
Else
period = CType( parentRow.Cells( "Period" ).Content, Period )
compositionCount = CInt( value )
EndIfIf( ( period = Period.Modern ) And ( compositionCount > 40 ) ) ThenReturnNew ValidationResult( False, "Composition count must be less than 50 when the period is set to Modern." );
EndIfReturn ValidationResult.ValidResult
End FunctionEnd ClassEnd Namespace
Implementation of the PeriodVSCompositionCountCellValidationRule validation rule. Implementation of the Person class can be found in the Validating Data topic.
using System;
using Xceed.Wpf.DataGrid.ValidationRules;
using Xceed.Wpf.DataGrid;
using System.Globalization;
using System.Windows.Controls;
namespace Xceed.Wpf.Documentation
{
publicclass PeriodVSCompositionCountCellValidationRule : CellValidationRule
{
publicoverride ValidationResult Validate( object value, CultureInfo culture,
CellValidationContext context )
{
Row parentRow = context.Cell.ParentRow;
int compositionCount;
Period period;
if( context.Cell.FieldName == "Period" )
{
period = ( Period )value;
compositionCount = ( int )parentRow.Cells[ "CompositionCount" ].Content;
}
else
{
period = ( Period )parentRow.Cells[ "Period" ].Content;
compositionCount = ( int )value;
}
if( ( period == Period.Modern ) && compositionCount > 40 )
returnnew ValidationResult( false, "Composition count must be less than 50 when the period is set to Modern." );
return ValidationResult.ValidResult;
}
}
}
Requirements
Target Platforms: Windows 11, Windows 10, Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2