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

Defining Custom DataFields

This help article illustrates how to define your own DataField type.

For this purpose you need to create a class which inherits from DataFormDataField and overrides its GetControl() and GetControlBindingProperty() methods:

Example 1: Creating the DataFormNumericUpDownField class

public class DataFormNumericUpDownField : DataFormDataField 
{ 
    protected override DependencyProperty GetControlBindingProperty() 
    { 
        return RadNumericUpDown.ValueProperty; 
    } 
    protected override Control GetControl() 
    { 
        DependencyProperty dependencyProperty = this.GetControlBindingProperty(); 
        RadNumericUpDown numericUpDown = new RadNumericUpDown(); 
        if (this.DataMemberBinding != null) 
        { 
            var binding = this.DataMemberBinding; 
            numericUpDown.SetBinding(dependencyProperty, binding); 
        } 
        numericUpDown.SetBinding(RadNumericUpDown.IsEnabledProperty, new Binding("IsReadOnly") { Source = this, Converter = new InvertedBooleanConverter() }); 
        return numericUpDown; 
    } 
} 
Public Class DataFormNumericUpDownField 
    Inherits DataFormDataField 
    Protected Overrides Function GetControlBindingProperty() As DependencyProperty 
        Return RadNumericUpDown.ValueProperty 
    End Function 
    Protected Overrides Function GetControl() As Control 
        Dim dependencyProperty As DependencyProperty = Me.GetControlBindingProperty() 
        Dim numericUpDown As New RadNumericUpDown() 
        If Me.DataMemberBinding IsNot Nothing Then 
            Dim binding = Me.DataMemberBinding 
            numericUpDown.SetBinding(dependencyProperty, binding) 
        End If 
        numericUpDown.SetBinding(RadNumericUpDown.IsEnabledProperty, New Binding("IsReadOnly") With { 
            .Source = Me, 
            .Converter = New InvertedBooleanConverter() 
        }) 
        Return numericUpDown 
    End Function 
End Class 

The next step is to handle RadDataForm's AutoGeneratingField event and set the DataField to the new DataFormNumericUpDownField:

Example 2: Initializing a RadDataForm

<telerik:RadDataForm x:Name="DataForm1" AutoGeneratingField="RadDataForm_AutoGeneratingField" /> 

Example 3: Handling the AutoGeneratingField event

private void RadDataForm_AutoGeneratingField(object sender, Telerik.Windows.Controls.Data.DataForm.AutoGeneratingFieldEventArgs e) 
{ 
    if (e.DataField.Label.Equals("Number")) 
    { 
        e.DataField = new DataFormNumericUpDownField() { Label = e.DataField.Label, DataMemberBinding = e.DataField.DataMemberBinding }; 
    } 
} 
    Private Sub RadDataForm_AutoGeneratingField(sender As Object, e As Telerik.Windows.Controls.Data.DataForm.AutoGeneratingFieldEventArgs) 
        If e.DataField.Label.Equals("Number") Then 
            e.DataField = New DataFormNumericUpDownField() With { 
                .Label = e.DataField.Label, 
                .DataMemberBinding = e.DataField.DataMemberBinding 
            } 
        End If 
    End Sub 

And here's how you can use the DataFormNumericUpDownField in XAML:

Example 4: Using the DataFormNumericUpDownField in a Custom DataTemplate

<Grid> 
    <Grid.Resources> 
        <DataTemplate x:Key="MyTemplate"> 
            <StackPanel> 
                <telerik:DataFormDataField  Label="First Name" DataMemberBinding="{Binding FirstName, Mode=TwoWay}" /> 
                <telerik:DataFormDataField  Label="Last Name" DataMemberBinding="{Binding LastName, Mode=TwoWay}" /> 
                <my:DataFormNumericUpDownField Label="Age" DataMemberBinding="{Binding Age, Mode=TwoWay}" /> 
            </StackPanel> 
        </DataTemplate> 
    </Grid.Resources> 
    <telerik:RadDataForm AutoGenerateFields="False" 
                     ReadOnlyTemplate="{StaticResource MyTemplate}" 
                     EditTemplate="{StaticResource MyTemplate}" 
                     NewItemTemplate="{StaticResource MyTemplate}"> 
    </telerik:RadDataForm> 
</Grid> 

See Also

In this article