逐步解說:將 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 資料繫結。 如需詳細資訊,請參閱資料繫結。
建立服務專案
建立空白 Web 應用程式專案以裝載 WCF 資料服務,開始進行這個逐步解說。
若要建立服務專案
在 [檔案] 功能表上,指向 [新增],然後按一下 [專案]。
展開 [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 程式開發伺服器的連接埠號碼。
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 程式開發伺服器的正確連接埠。
後續步驟
完成這個逐步解說後,您可以執行下列相關的工作:
學習如何將變更儲存回資料庫。 如需詳細資訊,請參閱資料繫結。
學習如何使用 Silverlight 應用程式中的 WCF 資料服務 加入更多功能。 如需詳細資訊,請參閱 ADO.NET 資料服務 (Silverlight)。
請參閱
其他資源
變更記錄
日期 |
記錄 |
原因 |
---|---|---|
2011 年 5 月 |
加入疑難排解建議。 |
客戶回函。 |