The following example demonstrates how to create a custom ValidationRule and apply it to a column's binding to provide binding-level validation.
The implementation for the YearValidationRule is provided below.
XAML |
Copy Code |
---|---|
<Grid xmlns:xcdg="http://schemas.xceed.com/wpf/xaml/datagrid" xmlns:local="clr-namespace:Xceed.Wpf.Documentation"> <Grid.Resources> <xcdg:DataGridCollectionViewSource x:Key="cvs_composers" Source="{Binding Source={x:Static Application.Current}, Path=Composers}"/> </Grid.Resources> <xcdg:DataGridControl ItemsSource="{Binding Source={StaticResource cvs_composers}}" UpdateSourceTrigger="RowEndingEdit"> <xcdg:DataGridControl.Columns> <xcdg:Column FieldName="BirthYear"> <xcdg:Column.DisplayMemberBindingInfo> <xcdg:DataGridBindingInfo Path="BirthYear"> <xcdg:DataGridBindingInfo.ValidationRules> <local:YearValidationRule /> </xcdg:DataGridBindingInfo.ValidationRules> </xcdg:DataGridBindingInfo> </xcdg:Column.DisplayMemberBindingInfo> </xcdg:Column> <xcdg:Column FieldName="DeathYear"> <xcdg:Column.DisplayMemberBindingInfo> <xcdg:DataGridBindingInfo Path="DeathYear"> <xcdg:DataGridBindingInfo.ValidationRules> <local:YearValidationRule /> </xcdg:DataGridBindingInfo.ValidationRules> </xcdg:DataGridBindingInfo> </xcdg:Column.DisplayMemberBindingInfo> </xcdg:Column> </xcdg:DataGridControl.Columns> </xcdg:DataGridControl> </Grid> |
Implementation of the YearValidationRule validation rule.
VB.NET |
Copy Code |
---|---|
Imports System Imports System.Windows.Controls Imports System.Globalization Namespace Xceed.Wpf.Documentation Public Class YearValidationRule Inherits ValidationRule Public Overrides Function Validate( ByVal value As Object, _ ByVal cultureInfo As CultureInfo ) As ValidationResult Dim year As Integer = CInt( value ) If year > DateTime.Now.Year Then Return New ValidationResult( False, "Chosen year cannot be greater than this year." ) End If Return ValidationResult.ValidResult End Function End Class End Namespace |
C# |
Copy Code |
---|---|
using System; using System.Windows.Controls; using System.Globalization; namespace Xceed.Wpf.Documentation { public class YearValidationRule : ValidationRule { public override ValidationResult Validate( object value, CultureInfo cultureInfo ) { int year = ( int )value; if( year > DateTime.Now.Year ) return new ValidationResult( false, "Chosen year cannot be greater than this year." ); return ValidationResult.ValidResult; } } } |