图 9 包含了用于查询销售清单服务的代码,以及将结果绑定到 Home Finder Silverlight 应用程序顶部表格中的代码。
图 9 创建客户端代理上下文
private void getListings()
{
DataServiceCollection<Listing> listings = new
DataServiceCollection<Listing>();
listingsGrid.ItemsSource = listings;
var query = from listing in
listingsService.Listings.Expand("Property")
select listing;
listings.LoadAsync(query);
}
图 9 中的代码创建了被跟踪的集合 DataServiceCollection,并将该集合绑定到主销售清单表格的 ItemsSource 属性。由于此集合实现了变更跟踪,因此对表格中任何条目的更改都将自动反映在销售清单集合的实体上。通过调用销售清单服务上下文的 BeginSaveChanges 方法,表格中的更改可保存到服务中。
在 Silverlight 中,所有的网络调用都是异步的,因此使用 WCF 数据服务客户端库对服务执行的任何操作都需要对操作进行初始调用,然后编写独立的回调方法,并传递到该方法以处理异步调用的结果。为了改进这种异步调用,DataServiceCollection 类添加了一个方法 LoadAsync,由其执行所有处理异步回调函数的工作并将结果加载到集合中。
在 图 9 的代码中,在调用 LoadAsync 之前将集合绑定到表格,因此在异步调用完成之前,值不会加载到集合中。当结果从服务返回时,集合将会引发集合更改事件,表格将捕获这些事件,并在异步调用完成时显示结果。
从数据表格选择销售清单后,需要查询 SharePoint 站点以获取管理该清单的代理人的信息。在此应用程序体系结构中,需要进行第二次查询,因为销售清单类型和代理人类型的数据源是相互独立的,二者之间没有明显的关系(如果从模型的角度考虑,此示例涉及两个完全独立的模型,模型之间的关系是由客户端创建并施加的虚拟关系)。
图 10 显示了在给定代理人姓名的情况下,如何查询 SharePoint 服务以获取代理人实体。从 OGDI 数据中查询 Home Finder 页面底部图表中的邻居信息时,使用了相似的代码序列。到目前为止的代码仅演示了 Silverlight 客户端的查询功能,但此客户端并不仅限于查询,而是提供了丰富的功能,可以将更改从客户端写回服务。