First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现

irst Look at Silverlight 2

Part3:通过网络获得数据并通过DataGrid展现

使用网络编程获取Digg信息

Silverlight2支持网络开发的接口API,可以使用Silverlight客户端直接调用远程的RESTSOAP/WSRSSJSONXML HTTP服务。Silverlight2也支持Socket开发APISystem.Net.Sockets)允许客户端使用非HTTP协议进行通讯。

跨域的网络访问

当网络调用时Silverlight2程序可以和他的原始服务器进行通讯(意味着程序可以通过URL访问这个程序下载时所使用的服务器)。Silverlight2程序也可以跨网络调用(程序可以访问与这个程序下载时所使用服务器不同的服务器),远程的Web服务器有一个XML的策略文件指明客户端是否允许跨域的网络调用。

Silverlight2有一个XML策略文件允许服务器管理员精确控制程序的访问策略。Silverlight2支持缺省的Flash跨域访问策略文件,这样你就可以使用Silverlight2访问目前已经支持Flash客户端访问的远程RESTSOAP/WSRSSJSONXML服务的WEB服务器。

Digg.com标题API

我们程序的终端用户可以通过程序输入搜索标题(例如:编程)并且单机搜索按钮获得Digg.com上的匹配的标题列表数据

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第1张图片1

我们使用 Digg.com List Stories REST API feed接口来完成。将查询的内容作为URL中的参数(例如:GET /stories/topic/programming),这个接口将返回匹配的XML格式的Digg标题列表。

使用System.Net.WebClient异步访问DiggREST格式信息

 

当搜索按钮被点击,我们将控制“Click”时间,从文本框中获得需要搜索的标题信息,然后通过网络调用Digg服务器获得XML标题列表。

Systems.Net的命名空间中,Silverlight有一个WebClienthelper类,我们可以使用这个类从一个URL地址以异步方式获得内容数据。使用异步的方式的好处是等待远程服务器响应,下载数据时我们的界面不会被锁定或者变得相应较慢。

使用WebClient类异步下载,我们所需要处理一下"DownloadStringCompleted"事件,用来响应下载完成时对应的操作。使用WebClient.DownloadStringAsync(url)进行异步下载。

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第2张图片2

通过上面的代码我们可以异步获得满足搜索条件的Digg信息的XML数据。

使用LINQ to XMLDigg XML数据文件解析成Story信息类

现在我们获得DiggXML信息文件,下一步我们将把它转换成“DiggStory”对象,我们将控制这个对象并将它与我们的控件进行绑定。

我们首先定义“DiggStory”类,它包含了与XML内容进行对应的属性(我们可以使用C# "automatic properties"自动化属性这个新特性)

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第3张图片3

我们然后使用LINQ(内置在Silverlight2中)和LINQ to XML(是一个可以在我们的Silverlight程序中使用的外部的类库),比较方便的解析过滤Digg服务器返回的XML文件数据,并将解析的结果初始化成“DiggStory”对象的序列。代码如下:

 

 

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第4张图片4

注意,我们使用了DiggStory强类型对象。

DataGrid数据网格控件中显示Digg信息

在我们的程序中,将使用Silverlight中的DataGrid控件显示Digg信息。首先需要引用SilverlightDataGrid Control数据集,然后使用DataGrid控件声明替换我们以前页面“Todo”文本信息内容(你也可以在工具箱中双击Datagrid控件,控件将在页面上自动被添加)。

5

DataGrid控件允许显示的配置列定义和显示方式(是否最大化控件)。如果你不指定这些,DataGrid将根据数据对象的结构创建缺省的列。

我们接下来需要编写后台代码,将DataGrid的“ItemSource”属性设为我们的从Digg获得的Story对象序列。

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第5张图片6

当我们运行这个Silverlight程序进行搜索是,我们可以看到从Digg网站获得的动态标题数据。

First Look at Silverlight 2--Part3:通过网络获得数据并通过DataGrid展现_第6张图片7

SiverlightDataGrid控件支持客户端表格控件的标准特性:双击编辑,选择,滚动,列重画,列排序等。也支持自动的流化层布局(他可以随着浏览器的缩放动态的变化)。DataGrid有丰富的模板类型,通过模板我们可以自定义列数据的显示和编辑是的风格。

下一步:

我们现在已经从Digg.com获得了数据并显示。下一步我们将回到我们的Page.xaml页面标签,取消内部的style风格化说明。使用CSS风格化封装外观风格的展现。

 

你可能感兴趣的:(xml,网络,datagrid,服务器,silverlight,LINQ)