Silverlight网络通信与数据处理详解
立即解锁
发布时间: 2025-08-25 01:57:23 阅读量: 3 订阅数: 14 


Silverlight 4快速开发指南
# Silverlight网络通信与数据处理详解
## 1. 网络通信方式
在网络通信中,有多种方式可以实现数据的传输和交互。以下是几种常见的方式及其特点:
- **使用代理类**:从开发角度来看,为服务生成客户端代理是最简单的方法。在构造客户端代理实例时,也很容易使用不同的端点。这种方式使用SOAP 1.1作为通过HTTP与对象进行通信的方式,是调用万维网上公开服务的最简单、最好的方法。如果服务发生变化,只需更新代理即可。若有多个公开端点,可在ClientConfig中查看并选择使用。
- **使用WebClient类**:这是从网站下载资源的最简单方法。主要的资源类型有文件(如本章前面示例中的存档媒体)和文本文件(如XML格式的联合供稿)。WebClient类提供了通过流或字符串下载数据的方式,使资源的访问变得相当容易。不过,它虽然提供了HTTP GET和POST方法,但无法向服务器发送更复杂的请求。
- **使用HttpWebRequest类**:支持GET和POST方法,同时支持HTTP和HTTPS协议。该类的另一个主要优点是支持浏览器提供的功能,如身份验证和cookie。
- **使用套接字**:用于直接与公开的TCP服务进行通信。与HTTP这种应用层协议不同,套接字通信没有应用层协议,服务和Silverlight应用程序之间必须事先商定好通信协议。套接字通信的主要优点是性能——设计良好的TCP服务的开销可能比直接通过HTTP/SOAP通信的开销更小。
- **UDP多播**:通过实现基于UDP协议的IP多播,可以建立多对多和一对多的通信,将一个数据包传递给所有用户(节点),从而减少整体网络开销。
下面是这些网络通信方式的对比表格:
| 通信方式 | 优点 | 缺点 | 适用场景 |
| --- | --- | --- | --- |
| 代理类 | 开发简单,易更新,支持多端点 | 依赖SOAP 1.1 | 调用万维网服务 |
| WebClient类 | 下载资源简单 | 无法发送复杂请求 | 下载文件和文本 |
| HttpWebRequest类 | 支持多种协议和功能 | - | 需要复杂请求和功能支持 |
| 套接字 | 性能高 | 需商定协议 | 对性能要求高的场景 |
| UDP多播 | 减少网络开销 | - | 多对多和一对多通信 |
## 2. Silverlight 4数据绑定增强功能
为了支持企业级和数据驱动的业务应用程序的开发,Silverlight 4在数据绑定方面引入了许多增强功能,具体如下:
1. **拖放数据绑定**:使用Visual Studio 2010和智能工具支持,在Silverlight 3及更高版本中可以实现拖放数据绑定。
2. **IDataErrorInfo接口支持**:类似于WPF,允许在客户端验证属性值而不抛出异常。
3. **复杂多属性验证**:对实现IDataErrorInfo(用于同步验证)或INotifyDataErrorInfo(用于异步验证)接口的绑定对象进行复杂的多属性验证。
4. **绑定到DependencyObject实例和字符串索引器**:可以将数据绑定到这些对象和索引器。
5. **字符串格式化和默认值设置**:通过StringFormat属性指定字符串格式化选项,并通过FallbackValue和TargetNullValue属性指定数据绑定系统中的默认显示值。
6. **DataGrid控件增强**:如行级复制和自动调整列大小等功能。
7. **集合项分组**:通过CollectionViewSource类的GroupDescriptions属性对集合项进行分组。
8. **WCF数据服务绑定支持**:使用DataServiceCollection(T)类支持与Silverlight控件进行数据绑定。
9. **增强的隔离存储功能**:提供更好的文件管理能力。
## 3. 数据显示与绑定
### 3.1 数据显示控件
Silverlight提供了一些控件用于显示数据,如ListBox和DataGrid。ListBox可以将用户界面元素连接到数据源并自动显示数据,而DataGrid专门用于以行和列的形式显示数据,它在显示数据、列标题和页脚方面提供了很大的灵活性。
### 3.2 数据绑定基础
数据绑定是将数据源连接到用户界面元素(如TextBlock、TextBox或ListBox)的过程。有单向数据绑定(数据仅显示在用户界面中)和双向数据绑定(用户在用户界面元素中所做的任何更改都会反映在基础数据源中)两种方式。在Silverlight中,数据源通常是具有可访问属性的对象或对象集合。
### 3.3 绑定标记扩展
在进行数据绑定之前,需要了解绑定标记扩展(Binding markup extension),它可以在XAML或代码隐藏中使用。由于不能直接绑定到基本数据类型(如Int32和string),因此需要至少一个包含类,例如:
```csharp
public class WebDeveloper
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Website { get; set; }
}
```
若想在TextBlock控件中显示FirstName属性,可以这样做:
```xml
<TextBlock x:Name="nameTextBlock" Text="{Binding FirstName}"/>
```
另外,还需要将TextBlock控件的DataContext属性设置为WebDeveloper对象。
### 3.4 绑定模式
绑定标记扩展支持三种操作模式:
- **OneTime**:数据绑定只发生一次,即初始绑定后对数据源的任何更改都不会反映在用户界面中。
- **OneWay**:数据仅从数据源流向用户界面。每当数据源更新时,用户界面都会反映这些更改,这是默认模式。
- **TwoWay**:数据在数据源和用户界面之间双向流动。任何一方的更改都会自动反映在另一方。
### 3.5 绑定语法和属性
以下是绑定标记扩展的有效XAML语法:
| 语法 | 描述 |
| --- | --- |
| {Binding} | 表示数据绑定,操作模式为OneWay,常用于ListBox等控件的项模板。 |
| {Binding path} | 表示数据绑定并指定提供数据的属性,路径采用对象属性用点分隔的形式,允许深入对象内部。 |
| {Binding properties} | 表示数据绑定,但可以使用name=value语法设置数据绑定配置属性。 |
| {Binding path, properties} | 结合了前两种格式,允许指定提供数据的对象属性并配置数据绑定。 |
System.Windows.Data.Binding类还有许多属性可以控制数据绑定的行为,如下表所示:
| 属性名 | 类型 | 描述 |
| --- | --- | --- |
| BindsDirectlyToSource | bool | 定义绑定是否忽略数据源上的ICollectionView设置而直接绑定到数据源,默认值为false。 |
| Converter | IValueConverter | 用于在数据往返数据源的过程中轻松执行自定义转换,有助于在保持数据源数据格式的同时改变数据在用户界面中的显示方式。 |
| ConverterCulture | CultureInfo | 用于指定转换器使用的文化。如果值为null,则由FrameworkElement.Language属性确定文化。 |
| ConverterParameter | object | 供转换器使用的自定义参数,默认值为null。 |
| ElementName | String | 指定用作绑定源对象的元素的名称,默认值为null。 |
| Mode | BindingMode | 指定数据在数据源和用户界面之间的流动方式和位置,有效模式为OneWay、OneTime和TwoWay,默认值为OneWay。 |
| NotifyOnValidatonError | bool | 设置为true时,如果在双向数据绑定中提交更改到数据源时验证失败,数据绑定系统将引发BindingValidationError事件。默认值为false,即忽略验证错误。 |
| Path | string | 指定数据绑定源的目标属性路径。若使用Binding.Source属性设置数据源,路径值应设为空字符串("")。 |
| RelativeSource | RelativeSource | 通过指定绑定源相对于绑定目标位置的相对位置来指定绑定源,默认值为null。 |
| Source | object | 指定数据绑定的源对象,会覆盖可视化树中包含元素上设置的DataContext。 |
| UpdateSourceTrigger | UpdateSourceTrigger | 定义双向绑定中绑定源更新的时机。默认值为Default,表示绑定目标值更改时自动更新绑定源;另一个可能的值是Explicit,禁用自动更新,需要显式调用BindingExpression.UpdateSource方法来更新绑定源。 |
| ValidatesOnDataErrors | bool | 定义绑定引擎是否报告IDataErrorInfo验证错误,默认值为false,这是Silverlight 4中的新属性。 |
| ValidatesOnExceptions | bool | 当此属性和NotifyOnValidationError都为true时,如果在双向绑定中更新数据源时,源对象的设置器或绑定引擎的类型转换器生成异常,数据绑定系统将引发BindingValidationError事件。如果此属性为false,或者此属性为true但NotifyOnValidationError为false,应用程序将不会感知到数据绑定系统生成的异常。默认值为false。 |
| ValidatesOnNotifyDataErrors | bool | 定义绑
0
0
复制全文
相关推荐










