在本逐步解說中,您將建立包含數據綁定控件的 WPF 應用程式。 這些控制項會系結至封裝在 WCF 數據服務中的客戶記錄。 您也會新增客戶可用來檢視和更新記錄的按鈕。
本逐步解說將說明下列工作:
建立從 AdventureWorksLT 範例資料庫中數據產生的實體數據模型。
建立 WCF 數據服務,以將實體數據模型中的數據公開給 WPF 應用程式。
將項目從 數據源 視窗拖曳至 WPF 設計師,以建立一組數據綁定控件。
建立可向前和向後巡覽客戶記錄的按鈕。
建立按鈕,將控件中的數據變更儲存至 WCF Data Service 和基礎數據源。
備註
本文中的指示說明 Visual Studio 中可用的互動式開發體驗 (IDE) 最新版本。 您的電腦可能會顯示某些使用者介面元素的不同名稱或位置。 您可能使用不同的 Visual Studio 版本或不同的環境設定。 如需詳細資訊,請參閱 個人化 IDE。
先決條件
您需要下列元件才能完成本操作指南:
Visual Studio
存取一個正在運行並已附加 AdventureWorksLT 範例資料庫的 SQL Server 或 SQL Server Express 實例。 若要下載資料庫,請參閱 AdventureWorks 範例資料庫
先前瞭解下列概念也很有幫助,但不需要以完成導覽為前提:
WCF Data Services 中的數據模型。
實體數據模型和 ADO.NET Entity Framework。 如需詳細資訊,請參閱 Entity Framework 概觀。
WPF 數據系結。 如需詳細資訊,請參閱 數據系結概觀。
建立服務專案
建立 C# 或 Visual Basic ASP.NET Web 應用程式 專案,以啟動此逐步解說。 將專案命名為 AdventureWorksService。
在 [方案總管] 中,以滑鼠右鍵按兩下 Default.aspx ,然後選取 [ 刪除]。 本操作指南不需要此檔案。
建立服務的實體數據模型
若要使用 WCF 資料服務向應用程式公開資料,您必須定義服務的數據模型。 WCF 數據服務支援兩種類型的數據模型:實體數據模型,以及使用實作 介面的 Common Language Runtime (CLR) 物件 IQueryable<T> 所定義的自定義數據模型。 在本引導指南中,您會為資料模型建立實體資料模型。
在 [專案] 功能表上,按一下 [新增項目]。
在 [已安裝的範本] 清單中,按一下 [資料],然後選取 [ADO.NET 實體資料模型] 專案項目。
將名稱變更為
AdventureWorksModel.edmx,然後按兩下 [ 新增]。[c0>實體資料模型精靈] 隨即開啟。
在 [ 選擇模型內容 ] 頁面上,按兩下 [ 從資料庫產生],然後按 [ 下一步]。
在 [ 選擇您的數據連線 ] 頁面上,選取下列其中一個選項:
如果下拉式清單中有 AdventureWorksLT 範例資料庫的數據連線可用,請選取它。
單擊 [新增連線],然後建立 AdventureWorksLT 資料庫的連線。
在 [ 選擇您的數據連線 ] 頁面上,確定已選取 [ 在 App.Config 中儲存實體連線設定] 選項,然後選取 [ 下一步]。
在 [ 選擇資料庫物件] 頁面上,展開 [ 數據表],然後選取 SalesOrderHeader 數據表。
按一下完成。
建立服務
建立 WCF 數據服務,將實體數據模型中的數據公開給 WPF 應用程式:
在 [ 專案] 功能表上,選取 [新增專案]。
在 [ 已安裝的範本 ] 清單中,按兩下 [Web],然後選取 [WCF 數據服務 ] 項目專案。
在 [ 名稱] 方塊中,輸入
AdventureWorksService.svc,然後按兩下 [ 新增]。Visual Studio 會將 新增
AdventureWorksService.svc至專案。
設定服務
您必須設定服務,以在您所建立的實體資料模型上運作:
在程式代碼檔案中
AdventureWorks.svc,以下列程序代碼取代 AdventureWorksService 類別宣告。public class AdventureWorksService : DataService<AdventureWorksLTEntities> { // This method is called only once to initialize service-wide policies. public static void InitializeService(IDataServiceConfiguration config) { config.SetEntitySetAccessRule("SalesOrderHeaders", EntitySetRights.All); } }此程式代碼會更新 AdventureWorksService 類別,使其衍生自 DataService<T> 在實體資料模型中的物件內容類別上運作的
AdventureWorksLTEntities。 它也會更新InitializeService方法,以允許服務的客戶端對SalesOrderHeader實體進行完整的讀取/寫入存取。建置專案,並確認其建置時不會發生錯誤。
建立 WPF 用戶端應用程式
若要顯示 WCF 資料服務中的數據,請使用以服務為基礎的數據源建立新的 WPF 應用程式。 稍後在本逐步解說中,您將將數據綁定控件新增至應用程式。
在 [方案總管] 中,以滑鼠右鍵按兩下方案節點,按兩下 [ 新增],然後選取 [ 新增專案]。
在 [ 新增專案 ] 對話框中,展開 [Visual C# ] 或 [ Visual Basic],然後選取 [Windows]。
選取 WPF 應用程式 項目範本。
在 [ 名稱] 方塊中,輸入
AdventureWorksSalesEditor,然後按兩下 [ 確定]。Visual Studio 會將
AdventureWorksSalesEditor專案新增至方案。在 [ 數據] 功能表上,按兩下 [ 顯示資料源]。
[ 數據源] 視窗隨即開啟。
在 [數據源] 視窗中,按一下 [新增資料源]。
[數據源組態精靈] 隨即開啟。
在精靈的 [ 選擇數據源類型 ] 頁面中,選取 [ 服務],然後選取 [ 下一步]。
在 [ 新增服務參考 ] 對話框中,按兩下 [ 探索]。
Visual Studio 會搜尋目前的解決方案中是否有可用的服務,並將 新增
AdventureWorksService.svc至 [ 服務 ] 方塊中的可用服務清單。在 [ 命名空間] 方塊中,輸入 AdventureWorksService。
在 [ 服務 ] 方塊中,按兩下 [AdventureWorksService.svc],然後選取 [ 確定]。
Visual Studio 會下載服務資訊,然後返回 [數據源組態 精靈]。
在 [ 新增服務參考] 頁面中,按兩下 [ 完成]。
Visual Studio 會將代表服務所傳回之數據的節點新增至 [數據源] 視窗。
定義使用者介面
藉由修改 WPF 設計工具中的 XAML,將數個按鈕新增至視窗。 稍後在本逐步解說中,您將新增程式代碼,讓使用者使用這些按鈕來檢視和更新銷售記錄。
在 [方案總管] 中,雙擊 MainWindow.xaml。
視窗會在 WPF 設計工具中開啟。
在設計工具的 XAML 檢視中,於
<Grid>標記之間新增下列程式碼:<Grid.RowDefinitions> <RowDefinition Height="75" /> <RowDefinition Height="525" /> </Grid.RowDefinitions> <Button HorizontalAlignment="Left" Margin="22,20,0,24" Name="backButton" Width="75"><</Button> <Button HorizontalAlignment="Left" Margin="116,20,0,24" Name="nextButton" Width="75">></Button> <Button HorizontalAlignment="Right" Margin="0,21,46,24" Name="saveButton" Width="110">Save changes</Button>建置專案。
建立數據綁定控件
將 SalesOrderHeaders 節點從 [數據來源] 視窗拖曳至設計介面,以建立用來顯示客戶記錄的控制項。
在 [ 數據源] 視窗中,單擊 SalesOrderHeaders 節點的下拉功能表,然後選取 [ 詳細數據]。
展開 SalesOrderHeaders 節點。
在此範例中,不會顯示某些字段,因此按下列節點旁的下拉功能表,然後選取 [ 無]:
CreditCardApprovalCode
ModifiedDate
OnlineOrderFlag
RevisionNumber
rowguid
此動作可防止 Visual Studio 在下一個步驟中為這些節點建立數據綁定控件。 在本逐步解說中,假設使用者不需要看到此數據。
從 [ 數據源] 視窗中,將 SalesOrderHeaders 節點拖曳至包含按鈕之數據列底下的方格列。
Visual Studio 會產生 XAML 和程式代碼,以建立一組系結至 Product 數據表中數據的控件。 如需所產生 XAML 和程式碼的詳細資訊,請參閱 將 WPF 控件系結至 Visual Studio 中的數據。
在設計工具中,按兩下 [客戶標識符] 標籤旁的文字框。
在 [ 屬性] 視窗中,選取 IsReadOnly 屬性旁的複選框。
設定下列每一個文字框的 IsReadOnly 屬性:
採購單號碼
銷售訂單標識碼
銷售訂單號碼
從服務載入數據
使用服務代理物件從服務載入銷售數據。 然後將傳回的數據指派給 WPF 視窗中 的數據源 CollectionViewSource 。
在設計工具中,若要建立
Window_Loaded事件處理程式,請按兩下顯示為 MainWindow 的文字。以下列程式代碼取代 事件處理程式。 確保您將此程式碼中的
localhost位址替換為開發電腦上的本地端主機位址。private AdventureWorksService.AdventureWorksLTEntities dataServiceClient; private System.Data.Services.Client.DataServiceQuery<AdventureWorksService.SalesOrderHeader> salesQuery; private CollectionViewSource ordersViewSource; private void Window_Loaded(object sender, RoutedEventArgs e) { // TODO: Modify the port number in the following URI as required. dataServiceClient = new AdventureWorksService.AdventureWorksLTEntities( new Uri("http://localhost:45899/AdventureWorksService.svc")); salesQuery = dataServiceClient.SalesOrderHeaders; ordersViewSource = ((CollectionViewSource)(this.FindResource("salesOrderHeadersViewSource"))); ordersViewSource.Source = salesQuery.Execute(); ordersViewSource.View.MoveCurrentToFirst(); }
瀏覽銷售記錄
新增程式代碼,讓使用者使用 < 和 > 按鈕捲動銷售記錄。
在設計工具中,按兩下 < 視窗介面上的按鈕。
Visual Studio 會開啟程式碼後置檔案,並為
backButton_Click事件建立新的Click事件處理程式。將下列程式代碼新增至產生的
backButton_Click事件處理程式:返回設計工具,然後按兩下 > 按鈕。
Visual Studio 會開啟程式碼後置檔案,並為
nextButton_Click事件建立新的Click事件處理程式。將下列程式代碼新增至產生的
nextButton_Click事件處理程式:
儲存銷售記錄的變更
新增程式代碼,讓使用者使用 [儲存變更] 按鈕來檢視和儲存銷售記錄的 變更 :
在設計工具中,按兩下 [ 儲存變更 ] 按鈕。
Visual Studio 會開啟程式碼後置檔案,並為
saveButton_Click事件建立新的Click事件處理程式。將下列程式代碼新增至
saveButton_Click事件處理程式。
測試應用程式
建置並執行應用程式,以確認您可以檢視及更新客戶記錄:
在 建置 功能表上,按一下 建置方案。 確認解決方案建置時沒有錯誤。
按 Ctrl+F5。
Visual Studio 會啟動 AdventureWorksService 專案,而不進行偵錯。
在 方案總管 中以滑鼠右鍵單擊 AdventureWorksSalesEditor 專案。
在滑鼠右鍵功能表(內容功能表)的 偵錯 底下,按一下 啟動新實例。
應用程式運行。 確認下列各項:
文本框會顯示與第一筆銷售記錄不同的數據欄位,其中包含銷售訂單標識碼 71774。
您可以按下 > 或 < 按鈕,流覽其他銷售記錄。
在其中一筆銷售記錄中,於 [ 批注 ] 方塊中輸入一些文字,然後選取 [ 儲存變更]。
關閉應用程式,然後從 Visual Studio 再次啟動應用程式。
流覽至您變更的銷售記錄,並確認變更在您關閉並重新開啟應用程式之後會持續發生。
關閉應用程式。
後續步驟
完成本逐步解說之後,您可以執行下列相關工作:
瞭解如何使用 Visual Studio 中的 [數據源] 視窗,將 WPF 控件系結至其他類型的數據源。 如需詳細資訊,請參閱 將 WPF 控件系結至數據集。
瞭解如何在 Visual Studio 中使用 [資料源] 視窗,在 WPF 控件中顯示相關數據(也就是父子關聯性中的數據)。 如需詳細資訊,請參閱 逐步解說:在 WPF 應用程式中顯示相關數據。