Edit this page

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

        <DataTemplate x:Key="MyTemplate">
                <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}" />
    <telerik:RadDataForm AutoGenerateFields="False"
                     ReadOnlyTemplate="{StaticResource MyTemplate}"
                     EditTemplate="{StaticResource MyTemplate}"
                     NewItemTemplate="{StaticResource MyTemplate}">

See Also

Is this article helpful? Yes / No
Thank you for your feedback!

Give article feedback

Tell us how we can improve this article