Binding to WCF Service
The purpose of this tutorial is to show you how to populate a RadComboBox with a data from a WCF Service in two ways:
This tutorial uses the Northwind database.
Before proceeding further with this tutorial, you need to create a new application and a RadComboBox declaration in your XAML.
<telerik:RadComboBox />
Using Plain Methods Call in the Code-Behind
-
Add a reference to your WCF Service.
-
Switch to the code-behind and create a new instance of your WCF Service client.
C#ComboBoxWcfServiceClient serviceClient = new ComboBoxWcfServiceClient();VB.NETDim serviceClient As New ComboBoxWcfServiceClient() -
The ComboBox control will be populated with all Products from the Northwind database. In the drop-down list the ProductName and the UnitPrice properties will be displayed. Add the following code which will make the initial load of the objects.
C#private void BeginRequest() { serviceClient.GetProductsCompleted += new EventHandler<GetProductsCompletedEventArgs>( serviceClient_GetProductsCompleted ); serviceClient.GetProductsAsync(); } private void serviceClient_GetProductsCompleted( object sender, GetProductsCompletedEventArgs e ) { radComboBox.ItemsSource = e.Result; }VB.NETPrivate Sub BeginRequest() AddHandler serviceClient.GetProductsCompleted, AddressOf serviceClient_GetProductsCompleted serviceClient.GetProductsAsync() End Sub Private Sub serviceClient_GetProductsCompleted(ByVal sender As Object, ByVal e As GetProductsCompletedEventArgs) radComboBox.ItemsSource = e.Result End SubC#private void BeginRequest() { this.radComboBox.ItemsSource = serviceClient.GetProducts(); }VB.NETPrivate Sub BeginRequest() Me.radComboBox.ItemsSource = serviceClient.GetProducts() End Sub -
You need to declare a custom DataTemplate to determine how the items in the drop-down will look like. Add the following DataTemplate declaration in your XAML resources.
XAML<UserControl.Resources> <DataTemplate x:Key="CustomItemTemplate"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding ProductName}"/> <TextBlock Text=" - "/> <TextBlock Text="{Binding UnitPrice}"/> <TextBlock Text=" $"/> </StackPanel> </DataTemplate> </UserControl.Resources> -
Find your RadComboBox declaration and set the declared DataTemplate to its ItemTemplate property.
XAML<telerik:RadComboBox ItemTemplate="{StaticResource CustomItemTemplate}"/>
The end result with the data fetched from the service

Using MVVM Approach
This section will show you how to populate your RadComboBox control in a MVVM manner. The RadComboBox will be bound to a data source object, that has a property Products. When the control is loaded, all products from the Products table in the Northwind database are loaded asynchronously.
-
Create a new class named NorthwindDataSource.
C#private void serviceClient_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { foreach (Products p in e.Result) { this.Products.Add(p); } }VB.NETFor Each p As Products In serviceClient.GetProducts() Me.Products.Add(p) Next -
Add a reference to your WCF Service
-
In the NorthwindDataSource class add a reference to an ObservableCollection of Products.
-
In the NorthwindDataSource class add a reference to your WCF Service client:
C#private void serviceClient_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { foreach (Products p in e.Result) { this.Products.Add(p); } }VB.NETFor Each p As Products In serviceClient.GetProducts() Me.Products.Add(p) NextFor more information about how to add a reference to a WCF Service and how to create a new instance of a WCF Service client, take a look at the Consuming WCF Service topic.
-
Add the following code in the constructor of the NorthwindDataSource. It will make the initial load of all Products from the database:
C#private void serviceClient_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { foreach (Products p in e.Result) { this.Products.Add(p); } }VB.NETFor Each p As Products In serviceClient.GetProducts() Me.Products.Add(p) NextC#private void serviceClient_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { foreach (Products p in e.Result) { this.Products.Add(p); } }VB.NETFor Each p As Products In serviceClient.GetProducts() Me.Products.Add(p) NextC#private void serviceClient_GetProductsCompleted(object sender, GetProductsCompletedEventArgs e) { foreach (Products p in e.Result) { this.Products.Add(p); } }VB.NETFor Each p As Products In serviceClient.GetProducts() Me.Products.Add(p) Next -
Declare the NorthwindDataSource object as a resource in your application.
XAML<telerik:RadComboBox x:Name="radComboBox" ItemsSource="{Binding Source={StaticResource DataSource}, Path=Products}" ItemTemplate="{StaticResource CustomItemTemplate}"/> -
Declare a custom DataTemplate to determine how the items in the drop-down will look like. Add the following DataTemplate declaration in your XAML resources.
XAML<telerik:RadComboBox x:Name="radComboBox" ItemsSource="{Binding Source={StaticResource DataSource}, Path=Products}" ItemTemplate="{StaticResource CustomItemTemplate}"/> -
Update your RadComboBox declaration - set the ItemsSource and ItemTemplate properties.
XAML<telerik:RadComboBox x:Name="radComboBox" ItemsSource="{Binding Source={StaticResource DataSource}, Path=Products}" ItemTemplate="{StaticResource CustomItemTemplate}"/>
The end result produced by the code above
