WCF RIA Services provides the DomainDataSource control to simplify the interaction between the user interface and the data from a domain context. With the DomainDataSource, you can retrieve, shape, and edit data using only declarative syntax. You specify the domain context to use the DomainDataSource, and then call the operations that are available through that domain context.

Configuring the Silverlight Application for DomainDataSource

In order to use the DomainDataSource control, you must add a reference in the Silverlight project to the System.Windows.Controls.DomainServices assembly. This reference is automatically added when you drag the DomainDataSource from the Toolbox. Optionally, to use the DataGrid with DomainDataSource, you must also add a reference to System.Windows.Controls.Data. This reference is also automatically added when you drag the DataGrid control from the Toolbox.

The host control, for example the UserControl, must contain the following namespace reference:

In order to define the domain context in a declarative manner, you must include the namespace of the server project. In the following example, OA.SL.RIA.Demo.Web is the name of the server project. You will use the name of your project.

xmlns:domain="clr-namespace:OA.SL.RIA.Demo.Web"

Retrieving and Displaying Data

You specify a domain context for the DomainDataSource and provide the name of the method to use for loading data. Then you bind presentation controls such as the DataGrid to the DomainDataSource. A query method called GetCustomers() must exist on the domain service for the example to work.

Adding Parameters to the Query

In some cases a query method requires parameter values. Typically, a query method requires a parameter value to filter the data that is returned. The DomainDataSource class provides the QueryParameters collection to facilitate adding parameters. The following example shows how to add a parameter value with a value that is specified in XAML.

A query method called GetCustomeById(), which accepts one parameter, must exist on the domain service for the example to work.

You can also add a parameter that uses a value from the user for the query. You bind a Parameter object to the user-input that contains the value that will be used in the query. The following example shows how to specify a value from a ComboBox, used as the parameter value.

Sorting

The DomainDataSource provides the SortDescriptors collection to facilitate sorting of the data. In the SortDescriptors collection, you add SortDescriptor instances that describe the values to be used for sorting the collection. You can add as many SortDescriptor instances as you want to provide layers of sorting. You can specify whether the data is sorted in ascending or descending order. The following example shows how to use a sort descriptor to the DomainDataSource. The data retrieved from the query is sorted by the FullName property in descending order.

Grouping

The DomainDataSource provides the GroupDescriptors collectionto to facilitate grouping the data by property values. In the GroupDescriptors collection, you add GroupDescriptor instances that define the value to be used for grouping. You can add as many GroupDescriptor instances as needed.

Filtering

The DomainDataSource control provides the FilterDescriptor collection to enable you to filter the data that is returned by the query. By adding filters, you can specify that only entities which meet the condition in the filter are loaded from the domain context. The following example shows two filter descriptors that are connected by a logical AND statement. One filter depends on the user input and one filter is specified in the declarative syntax.

Editing

To persist data modifications, call the SubmitChanges method on the DomainDataSource object. To cancel changes, call the RejectChanges method.

Paging

When displaying a large number of entities, you may wish to provide paging in your user interface. The DomainDataSource control enables you to specify the number of entities to load and the number of entities to be displayed on a page.

If you use the DataPager in an application with a Telerik Data Access for data store you must order the data returned by your queries for the DataPager to work correctly. Telerik Data Access does not support paging of data without an OrderBy clause in the query method or sorting specified on the Silverlight client.