New to Telerik UI for WPFStart a free 30-day trial

Getting Started with WPF DataForm

Updated on Sep 24, 2025

This article will walk your through the creation of a sample application that contains RadDataForm and will show you how to:

Adding Telerik Assemblies Using NuGet

To use RadDataForm when working with NuGet packages, install the Telerik.Windows.Controls.Data.for.Wpf.Xaml package. The package name may vary slightly based on the Telerik dlls set - Xaml or NoXaml

Read more about NuGet installation in the Installing UI for WPF from NuGet Package article.

With the 2025 Q1 release, the Telerik UI for WPF has a new licensing mechanism. You can learn more about it here.

Adding Assembly References Manually

If you are not using NuGet packages, you can add a reference to the following assemblies:

  • Telerik.Licensing.Runtime
  • Telerik.Windows.Controls
  • Telerik.Windows.Controls.Data
  • Telerik.Windows.Controls.Input
  • Telerik.Windows.Data

You can find the required assemblies for each control from the suite in the Controls Dependencies help article.

Adding RadDataForm to the Project

  • Create a new WPF project;

  • Add the RadDataForm to the Grid:

Example 1: Adding RadDataForm in XAML

XAML
	  <UserControl xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
	    <Grid x:Name="LayoutRoot" Background="White">
	      <telerik:RadDataForm x:Name="RadDataForm1" />
	    </Grid>
	  </UserControl>

Now if you run the application, you will see the empty RadDataForm:

Figure 1: Empty RadDataForm

Empty RadDataForm

Binding RadDataForm to a Single Item

Firstly, for the purpose of this tutorial, we will create a new Employee class with a couple of exposed properties:

Example 2: Creating an Employee Class with Some Exposed Properties

C#
	public class Employee
	{
	    public string FirstName
	    {
	        get;
	        set;
	    }
	    public string LastName
	    {
	        get;
	        set;
	    }
	    public string Occupation
	    {
	        get;
	        set;
	    }
	    public DateTime StartingDate
	    {
	        get;
	        set;
	    }
	    public bool IsMarried
	    {
	        get;
	        set;
	    }
	    public int Salary
	    {
	        get;
	        set;
	    }
	    public Gender Gender
	    {
	        get;
	        set;
	    }
	}

In the example above Gender is of type enum:

Example 3: Create Gender Enumeration

C#
	public enum Gender
	{
	    Female,
	    Male
	}

Note that in case you want to be notified on the changes made on the data item, the class Employee should implement the INotifyPropertyChanged interface and raise the PropertyChanged event every time a property value changes.

Once the class Employee is defined, you may use it for creating an object of this type and bind it to RadDataForm:

Example 4: Binding a Single Item to RadDataForm

C#
	Employee employee = new Employee()
	{
	    FirstName = "Sarah",
	    LastName = "Blake",
	    Occupation = "Supplied Manager",
	    StartingDate = new DateTime(2005, 04, 12),
	    IsMarried = true,
	    Salary = 3500,
	    Gender = Gender.Female
	};
	this.RadDataForm1.CurrentItem = employee;

After you run the application you should see the following:

Figure 2: RadDataForm bound to a single item

RadDataForm bound to a single item

Binding RadDataForm to a collection of custom objects

We will create a simple EmployeeService class with a single static method - GetEmployees() that will return an ObservableCollection<Employee>, containing several hard-coded employees:

Example 5: Creating an EmployeeService class with a static GetEmployees() method

C#
	public class EmployeeService
	{
	    public static ObservableCollection<Employee> GetEmployees()
	    {
	        ObservableCollection<Employee> employees = new ObservableCollection<Employee>();
	        employees.Add(new Employee() 
	        { 
	            FirstName = "Sarah", 
	            LastName = "Blake", 
	            Occupation = "Supplied Manager", 
	            StartingDate = new DateTime(2005, 04, 12), 
	            IsMarried = true, Salary = 3500, 
	            Gender = Gender.Female 
	        });
	        employees.Add(new Employee() 
	        { 
	            FirstName = "Jane", 
	            LastName = "Simpson", 
	            Occupation = "Security", 
	            StartingDate = new DateTime(2008, 12, 03), 
	            IsMarried = true, 
	            Salary = 2000, 
	            Gender = Gender.Female 
	        });
	        employees.Add(new Employee() 
	        { 
	            FirstName = "John", 
	            LastName = "Peterson", 
	            Occupation = "Consultant", 
	            StartingDate = new DateTime(2005, 04, 12), 
	            IsMarried = false, Salary = 2600, 
	            Gender = Gender.Male 
	        });
	        employees.Add(new Employee() 
	        { 
	            FirstName = "Peter", 
	            LastName = "Bush",
	            Occupation = "Cashier", 
	            StartingDate = new DateTime(2005, 04, 12), 
	            IsMarried = true, 
	            Salary = 2300, 
	            Gender = Gender.Male 
	        });
	        return employees;
	    }
	}

Afterwards, all you need to do is to set the ItemsSource of RadDataForm:

Example 6: Set the ItemsSource of the RadDataForm to the Observable Collection

C#
	this.RadDataForm1.ItemsSource = EmployeeService.GetEmployees();

On running the application, you should see the following:

Figure 3: RadDataForm bound to a collection of items

RadDataForm bound to a collection of items

As you may see, in this case the navigation buttons are displayed, thus allowing you to run through all the objects in the collection. Furthermore, you are allowed to add new item, delete and edit the current one.

Telerik UI for WPF Learning Resources