New to Telerik UI for WPF? Download free 30-day trial

Property level validation

RadDataForm provides data validation of the user input. Data Validation enables you to take complete control of the data entered in the fields of the data form.

Generally, the built-in validation will be performed once the edit has been committed and the RadDataForm will be visualized as follows:

WPF RadDataForm Built-In Validation

In the case above the Framework handles the validation and it fails due to type incompatibility.

However, you are free to perform your own custom logic when validating. The first approach would be to handle the ValidatingItem event of the RadDataForm. You may subscribe to it, define the validation rules you want to apply and cancel the default validation.

For example:

Example 1: Handling the ValidatingItem Event

private void DataForm1_ValidatingItem(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    var employer = this.DataForm1.CurrentItem as Employee; 
    if (employer.Salary < 1000) 
    { 
        e.Cancel = true; 
        RadWindow.Alert("You have to raise " + employer.LastName + " salary"); 
    } 
} 
Private Sub DataForm1_ValidatingItem(sender As Object, e As System.ComponentModel.CancelEventArgs) 
    Dim employer = TryCast(Me.DataForm1.CurrentItem, Employee) 
    If employer.Salary < 1000 Then 
        e.Cancel = True 
        RadWindow.Alert("You have to raise " & Convert.ToString(employer.LastName) & " salary") 
    End If 
End Sub 

In this case the RadDataForm will be displayed as the image below:

WPF RadDataForm with RadWindow Alert

Yet another approach applicable when defining custom fields is to specify the validation properties in the binding and perform the logic inside the property setter. For example:

Example 2: Perform the Validation inside the Property Setter

public DateTime StartingDate 
{ 
    get 
    { 
        return this.startingDate; 
    } 
    set 
    { 
        if (value != this.startingDate) 
        { 
            if (value > DateTime.Now) 
            { 
                throw new ValidationException("Starting date should not be earlier than 2011"); 
            } 
            else 
            { 
                this.startingDate = value; 
                this.OnPropertyChanged("StartingDate"); 
            } 
        } 
    } 
} 
Public Property StartingDate() As DateTime 
    Get 
        Return Me.m_startingDate 
    End Get 
    Set(value As DateTime) 
        If value <> Me.StartingDate Then 
            If value > DateTime.Now Then 
                Throw New ValidationException("Starting date should not be earlier than 2011") 
            Else 
                Me.m_startingDate = value 
                Me.OnPropertyChanged("StartingDate") 
            End If 
        End If 
    End Set 
End Property 

The definition of the DataFormDataField should be like follows:

Example 3: Defining the DataFormDataField

<telerik:DataFormDateField Label="Starting date" DataMemberBinding="{Binding StartingDate, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/> 

Once the validation is performed, the RadDataForm will be displayed as in the image below:

WPF RadDataForm with Property-Level Validation

In this article