演练:将 Silverlight 控件绑定到 WCF 数据服务
更新:2011 年 5 月
在本演练中,您将创建一个包含数据绑定控件的 Silverlight 应用程序。 这些控件将绑定到通过 WCF 数据服务访问的客户记录。
本演练阐释了以下任务:
创建一个利用 AdventureWorksLT 示例数据库中的数据生成的实体数据模型。
创建一个向 Silverlight 应用程序公开实体数据模型中的数据的 WCF 数据服务。
运行**“数据源配置向导”以连接到填充“数据源”**窗口的数据服务。
通过将项从**“数据源”**窗口拖到 Silverlight Designer 来创建一组数据绑定控件。
创建用于向前和向后浏览记录的按钮。
提示
以下说明中的某些 Visual Studio 用户界面元素在您的计算机上出现的名称或位置可能会不同。 您安装的 Visual Studio 版本以及使用的设置决定了这些元素。 有关更多信息,请参见 使用设置。
系统必备
您需要以下组件来完成本演练:
Visual Studio 2010.
对附加了 AdventureWorksLT 示例数据库的 SQL Server 或 SQL Server Express 的正在运行的实例的访问权限。 您可以从 CodePlex 网站下载 AdventureWorksLT 数据库。
事先了解以下概念也很有用,但对于完成本演练并不是必需的:
WCF 数据服务。 有关更多信息,请参见 ADO.NET Data Services Framework Overview。
实体数据模型和 ADO.NET Entity Framework。 有关更多信息,请参见Entity Data Model和Introducing the Entity Framework。
使用 Silverlight Designer。 有关更多信息,请参见 Silverlight Tools。
Silverlight 数据绑定。 有关更多信息,请参见 Data Binding(数据绑定)。
创建服务项目
通过创建一个用于承载 WCF 数据服务的空 Web 应用程序项目来开始本演练。
创建服务项目
在**“文件”菜单上指向“新建”,再单击“项目”**。
展开**“Visual C#”或“Visual Basic”,然后选择“Web”**。
选择**“ASP.NET 空 Web 应用程序”**项目模板。
在**“名称”框中,键入 AdventureWorksWebApp,然后单击“确定”**。
为服务创建实体数据模型
若要通过使用 WCF 数据服务向应用程序公开数据,则必须为该服务定义一个数据模型。 在本演练中,请创建实体数据模型。
创建实体数据模型
在**“项目”菜单上,单击“添加新项”**。
在**“数据”类别中,选择“ADO.NET 实体数据模型”**项目项。
将名称更改为 AdventureWorksDataModel.edmx,然后单击**“添加”**。
**“实体数据模型向导”**将打开。
在**“选择模型内容”页上,单击“从数据库生成”,然后单击“下一步”**。
在**“选择您的数据连接”**页上,选择下列选项之一:
如果下拉列表中包含到 AdventureWorksLT 示例数据库的数据连接,请选择该连接。
或
单击**“新建连接”**并创建到 AdventureWorksLT 数据库的连接。
验证是否选择了**“将 Web.Config 中的实体连接设置另存为”选项,然后单击“下一步”**。
在**“选择数据库对象”页上,展开“表”,然后选择“Customer”**表。
单击**“完成”**。
创建服务
创建 WCF 数据服务以公开实体数据模型中的数据。
创建服务
在**“项目”菜单上选择“添加新项”**。
在**“Web”类别中,选择“WCF 数据服务”**项目项。
在**“名称”框中键入 AdventureWorksDataService.svc,然后单击“添加”**。
配置服务
若要操作所创建的实体数据模型,您必须对服务进行配置。
配置服务
在 AdventureWorksDataService.svc 代码文件中,用下面的代码替换 AdventureWorksDataService 类声明:
Public Class AdventureWorksDataService Inherits DataService(Of AdventureWorksLTEntities) ' This method is called only once to initialize service-wide policies. Public Shared Sub InitializeService(ByVal config As DataServiceConfiguration) config.SetEntitySetAccessRule("*", EntitySetRights.All) config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2 End Sub End Class
public class AdventureWorksDataService : DataService<AdventureWorksLTEntities> { // This method is called only once to initialize service-wide policies. public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("*", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } }
生成项目,并确认生成过程中未发生错误。
创建 Silverlight 应用程序
创建新的 Silverlight 应用程序,然后添加数据源以访问服务。
创建 Silverlight 应用程序:
在**“解决方案资源管理器”中,右击解决方案节点,单击“添加”,然后选择“新建项目”**。
提示
在 Visual Basic 项目中,仅当在“选项”对话框 ->“项目和解决方案”->“常规”中选中“总是显示解决方案”复选框时,解决方案节点才会出现在“解决方案资源管理器”中。
在**“新建项目”对话框中,展开“Visual C#”或“Visual Basic”,然后选择“Silverlight”**。
选择**“Silverlight 应用程序”**项目模板。
在**“名称”框中,键入 AdventureWorksSilverlightApp,然后单击“确定”**。
在**“新建 Silverlight 应用程序”对话框中,单击“确定”**。
向 Silverlight 应用程序中添加数据源
创建基于服务所返回的数据的数据源。
创建数据源
在**“数据”菜单上,单击“显示数据源”**。
在**“数据源”窗口中,单击“添加新数据源”**。
**“数据源配置向导”**打开。
在该向导的**“选择数据源类型”页上,选择“服务”,然后单击“下一步”**。
在**“添加服务引用”对话框中,单击“发现”**。
Visual Studio 将在当前解决方案中搜索可用服务,并将 AdventureWorksDataService.svc 添加到**“服务”**框中可用服务的列表中。
在**“命名空间”**框中,键入 AdventureWorksService。
在**“服务”框中,单击 AdventureWorksDataService.svc,然后单击“确定”**。
在**“添加服务引用”页上,单击“完成”**。
Visual Studio 将表示该服务返回的数据的节点添加到**“数据源”**窗口中。
定义窗口的用户界面
通过在 Silverlight Designer 中修改 XAML,向窗口中添加按钮。
创建窗口布局
在**“解决方案资源管理器”**中,双击 MainPage.xaml。
窗口将在 Silverlight Designer 中打开。
在设计器的 XAML 视图中,在 <Grid> 标记之间添加以下代码:
<Grid.RowDefinitions> <RowDefinition Height="75" /> <RowDefinition Height="525" /> </Grid.RowDefinitions> <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75" Content="<"></Button> <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75" Content=">"></Button>
生成项目。
创建数据绑定控件
通过将 Customers 节点从**“数据源”**窗口拖动到设计器中,创建显示客户记录的控件。
创建数据绑定控件
在**“数据源”窗口中,单击“Customers”节点的下拉菜单,并选择“详细信息”**。
展开**“Customers”**节点。
在本示例中,由于一些字段不会显示,因此单击以下节点旁边的下拉菜单并选择**“无”**:
NameStyle
PasswordHash
PasswordSalt
rowguid
此操作将阻止 Visual Studio 在将控件拖到设计器上时为这些节点创建控件。 对于本演练,假定最终用户不需要查看此数据。
从**“数据源”窗口中,将“Customers”**节点拖动到按钮下面的设计器。
Visual Studio 将生成 XAML,以及用于创建绑定到客户数据的一组控件的代码。
从服务中加载数据
使用服务来加载数据,然后将返回的数据分配给绑定到控件的数据源。
从服务中加载数据
在设计器中,单击某个按钮旁边的空区域。
在**“属性”窗口中,验证“UserControl”是否处于选定状态,然后单击“事件”**选项卡。
找到**“Loaded”**事件并双击该事件。
在打开的代码文件 (MainPage.xaml) 中,添加以下 using (C#) 或 Imports (Visual Basic) 语句:
Imports System.Windows.Data Imports AdventureWorksSilverlightApp.AdventureWorksService
using System.Windows.Data; using AdventureWorksSilverlightApp.AdventureWorksService;
用下面的代码替换该事件处理程序。 确保用您的开发计算机上的本地主机地址替换此代码中的 localhost 地址:
Private advWorksService As AdventureWorksLTEntities Private customersViewSource As CollectionViewSource Private Sub UserControl_Loaded(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded advWorksService = New AdventureWorksLTEntities(New Uri("https://localhost:6188/AdventureWorksDataService.svc")) customersViewSource = Me.Resources("CustomersViewSource") advWorksService.Customers.BeginExecute(Sub(result As IAsyncResult) customersViewSource.Source = advWorksService.Customers.EndExecute(result) End Sub, Nothing) End Sub
private AdventureWorksLTEntities advWorksService; private System.Windows.Data.CollectionViewSource customersViewSource; private void UserControl_Loaded(object sender, RoutedEventArgs e) { advWorksService = new AdventureWorksLTEntities(new Uri("https://localhost:54961/AdventureWorksDataService.svc")); customersViewSource = this.Resources["customersViewSource"] as System.Windows.Data.CollectionViewSource; advWorksService.Customers.BeginExecute(result => customersViewSource.Source = advWorksService.Customers.EndExecute(result), null); }
测试应用程序
生成并运行应用程序,以验证您是否能够查看客户记录。
测试应用程序
在**“生成”菜单上,单击“生成解决方案”**。 验证解决方案已生成且未发生错误。
按 F5。
验证 Customers 表中的第一条记录是否显示。
重要事项 如果出现安全异常,请验证是否符合以下条件:
前一过程的第 5 步中使用的端口号与 ASP.NET Development Server 的端口号相匹配。
已将 AdventureWorksWebApp 设置为启动项目。
已将 AdventureWorksSilverlightAppTestPage.aspx 设置为起始页。
关闭应用程序。
导航记录
添加可通过使用**“<”和“>”**按钮来浏览记录的代码。
使用户能够导航销售记录
在设计器中打开 MainPage.xaml,并双击**“<”**按钮。
用下面的代码替换生成的 backButton_Click 事件处理程序:
Private Sub backButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles backButton.Click customersViewSource.View.MoveCurrentToPrevious() If customersViewSource.View.IsCurrentBeforeFirst Then customersViewSource.View.MoveCurrentToFirst() End If End Sub
private void backButton_Click(object sender, RoutedEventArgs e) { customersViewSource.View.MoveCurrentToPrevious(); if (customersViewSource.View.IsCurrentBeforeFirst) customersViewSource.View.MoveCurrentToFirst(); }
返回到设计器,并双击 > 按钮。
Visual Studio 将打开代码隐藏文件,并创建新的 nextButton_Click 事件处理程序。
用下面的代码替换生成的 nextButton_Click 事件处理程序:
Private Sub nextButton_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles nextButton.Click customersViewSource.View.MoveCurrentToNext() If customersViewSource.View.IsCurrentAfterLast Then customersViewSource.View.MoveCurrentToLast() End If End Sub
private void nextButton_Click(object sender, RoutedEventArgs e) { customersViewSource.View.MoveCurrentToNext(); if (customersViewSource.View.IsCurrentAfterLast) customersViewSource.View.MoveCurrentToLast(); }
测试应用程序
生成并运行应用程序,以验证您是否能够查看和导航客户记录。
测试应用程序
在**“生成”菜单上,单击“生成解决方案”**。 验证解决方案已生成且未发生错误。
按 F5。
验证 Customers 表中的第一条记录是否显示。
单击**“<”和“>”**按钮,向前和向后浏览客户记录。
关闭应用程序。
提示
如果在此处看到错误,请验证代码是否包含 ASP.NET Development Server 的正确端口。
后续步骤
完成本演练后,您可以执行以下相关任务:
了解如何将更改保存回数据库。 有关更多信息,请参见 Data Binding(数据绑定)。
了解如何使用 Silverlight 应用程序中的 WCF 数据服务结合更多功能。 有关更多信息,请参见 ADO.NET 数据服务 (Silverlight)。
请参见
其他资源
Data Access and Data Structures(数据访问和数据结构)
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2011 年 5 月 |
添加了疑难解答建议。 |
客户反馈 |