Пошаговое руководство. Привязка элементов управления WPF к службе данных WCF
В этом пошаговом руководстве описывается создание приложения WPF, которое содержит связанные с данными элементы управления. Эти элементы управления привязаны к записям о клиентах, инкапсулированным в службе данных Служба данных WCF. Кроме того, рассматривается добавление кнопок, с помощью которых пользователи смогут просматривать и обновлять записи.
В данном пошаговом руководстве рассмотрены следующие задачи:
Создание модели EDM, которая генерируется на основе данных в образце базы данных AdventureWorksLT.
Создание службы данных Служба данных WCF, которая делает данные в модели EDM доступными для приложения WPF.
Создание набора элементов управления с привязкой к данным путем перетаскивания элементов из окна Источники данных в конструктор WPF.
Создание кнопок для перемещения вперед и назад по записям о клиентах.
Создание кнопки для сохранения изменений данных, внесенных в элементы управления, в службе данных Служба данных WCF и базовом источнике данных.
Примечание
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях.Эти элементы определяются используемой версией Visual Studio и ее параметрами.Дополнительные сведения см. в разделе Работа с параметрами.
Обязательные компоненты
Ниже приведены компоненты, необходимые для выполнения данного пошагового руководства.
Visual Studio 2010.
Доступ к выполняющемуся экземпляру SQL Server 2005 или SQL Server 2005 Express с подключенным образцом базы данных AdventureWorksLT. Базу данных AdventureWorksLT можно загрузить с веб-узла CodePlex.
Предварительное ознакомление со следующими понятиями полезно, но не обязательно для выполнения пошагового руководства:
Службы данных WCF. Дополнительные сведения см. в разделе ADO.NET Data Services Framework Overview.
Модели данных в Службы данных WCF. Дополнительные сведения см. в разделе Data Model.
Модели EDM и платформа Entity Framework в ADO.NET. Дополнительные сведения см. в разделах Entity Data Model и Introducing the Entity Framework.
Работа с конструктором WPF. Дополнительные сведения см. в разделе Общие сведения о конструкторах WPF и Silverlight.
Привязка данных в WPF. Дополнительные сведения см. в разделе Общие сведения о связывании данных.
Создание проекта службы
Начните выполнение пошагового руководства с создания проекта для Служба данных WCF.
Чтобы создать проект службы, выполните следующие действия
Запустите Visual Studio.
В меню Файл последовательно выберите пункты Создать и Проект.
Разверните Visual C# или Visual Basic, затем выберите Веб.
Выберите шаблон проекта Веб-приложение ASP.NET.
В поле Имя введите AdventureWorksService и нажмите ОК.
Visual Studio создаст проект AdventureWorksService.
В обозревателе решений правой кнопкой мыши щелкните файл Default.aspx и выберите Удалить. Этот файл не используется в данном пошаговом руководстве.
Создание модели EDM для службы
Чтобы сделать данные доступными приложению с помощью Служба данных WCF, необходимо определить модель данных для службы. Служба данных WCF поддерживает модели данных двух типов: модели EDM и нестандартные модели данных, определяемые с помощью объектов среды CLR, которые реализуют интерфейс IQueryable<T>. В этом руководстве в качестве модели данных создается модель "сущность-данные" (Entity Data Model — EDM).
Для создания модели EDM выполните следующие действия
В меню Проект выберите команду Добавить новый элемент.
Выберите элемент проекта Модель EDM ADO.NET.
Измените имя на AdventureWorksModel.edmx и нажмите кнопку Добавить.
Откроется Мастер моделей EDM.
На странице Выбор содержимого модели щелкните Создать из базы данных и нажмите кнопку Далее.
На странице Выбор подключения к базе данных выберите один из следующих вариантов:
Если в раскрывающемся списке отображено подключение к образцу базы данных AdventureWorksLT, выберите его.
– или –
Щелкните Создать подключение и создайте подключение к базе данных AdventureWorksLT.
На странице Выбор подключения к базе данных удостоверьтесь, что флажок Сохранить настройки подключения сущности в App.Config как установлен, и нажмите кнопку Далее.
На странице Выбор объектов базы данных разверните узел Tables и выберите таблицу SalesOrderHeader.
Нажмите кнопку Готово.
Создание службы
Создайте службу данных Служба данных WCF, чтобы сделать данные в модели EDM доступными для приложения WPF.
Создание службы
В меню Проект выберите команду Добавить новый элемент.
Выберите элемент проекта Служба данных WCF.
В поле Имя введите AdventureWorksService.svc и нажмите Добавить.
Visual Studio добавит AdventureWorksService.svc в проект.
Настройка службы
Службу необходимо настроить для работы с созданной моделью EDM.
Чтобы настроить службу, выполните следующие действия
В файле кода AdventureWorks.svc замените объявление класса AdventureWorksService следующим кодом.
Public Class AdventureWorksService Inherits DataService(Of AdventureWorksLTEntities) ' This method is called only once to initialize service-wide policies. Public Shared Sub InitializeService(ByVal config As IDataServiceConfiguration) config.SetEntitySetAccessRule("SalesOrderHeaders", EntitySetRights.All) config.UseVerboseErrors = True End Sub End Class
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 в модели EDM. Он также обновляет метод InitializeService, чтобы предоставить клиентам службы полный доступ для чтения и записи к сущности SalesOrderHeader.
Дополнительные сведения о классах контекста объектов в платформе Entity Framework ADO.NET см. в разделе Object Services Overview (Entity Framework).
Постройте проект и удостоверьтесь, что построение выполняется без ошибок.
Создание клиентского приложения WPF
Чтобы отобразить данные в Служба данных WCF, создайте новое приложение WPF с источником данных, основанным на службе. Далее в этом руководстве будет описано, как добавлять в приложение связанные с данными элементы управления.
Чтобы создать клиентское приложение WPF, выполните следующие действия
В обозревателе решений щелкните правой кнопкой мыши узел решений, нажмите кнопку Добавить и выберите Новый проект.
Примечание
В проектах Visual Basic узел решений отображается в обозревателе решений, только когда установлен флажок Всегда показывать решение в "Общие", страница "Проекты и решения", диалоговое окно "Параметры".
В диалоговом окне Новый проект разверните узел Visual C# или Visual Basic и выберите пункт Windows.
Выберите шаблон проекта Приложение WPF.
В поле Имя введите AdventureWorksSalesEditor и нажмите ОК.
Visual Studio добавляет проект AdventureWorksSalesEditor в решение.
В меню Данные выберите пункт Показать источники данных.
Откроется окно Источники данных.
В окне Источники данных выберите Добавить новый источник данных.
Появится мастер настройки источника данных.
На странице мастера Выбор типа источника данных выберите Служба и нажмите кнопку Далее.
В диалоговом окне Добавить ссылку на службу выберите Найти.
Visual Studio выполнит в текущем решении поиск имеющихся служб и добавит AdventureWorksService.svc в список доступных служб в поле Службы.
В поле Пространство имен введите AdventureWorksService.
В поле Службы щелкните AdventureWorksService.svc и нажмите ОК.
Visual Studio загрузит информацию о службе и затем вернется к мастеру настройки источников данных.
На странице Добавление ссылки на службу щелкните Готово.
Visual Studio добавит в окно Источники данных узлы, которые представляют данные, возвращенные службой.
Определение пользовательского интерфейса окна
Путем изменения XAML в конструкторе WPF добавьте в окно несколько кнопок. Далее в этом руководстве будет описано добавление кода, который позволяет пользователям с помощью этих кнопок просматривать и обновлять записи о продажах.
Чтобы создать макета окна, выполните следующие действия
В обозревателе решений дважды щелкните 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.
В конструкторе щелкните поле со списком рядом с меткой ID клиента.
В окне Свойства установите флажок около свойства IsReadOnly.
Задайте свойство IsReadOnly каждому из следующих текстовых полей:
Номер заказа на покупку
Идентификатор заказа на продажу
Номер заказа на продажу
Загрузка данных из службы
Для загрузки из службы данных о продажах воспользуйтесь прокси-объектом службы, а затем назначьте возвращенные данные источнику данных для CollectionViewSource в окне WPF.
Чтобы загрузить данные из службы, выполните следующие действия
В конструкторе дважды щелкните текст MainWindow, чтобы создать обработчик событий Window_Loaded.
Замените обработчик событий следующим кодом. Обязательно замените в коде адрес localhost адресом локального узла на компьютере разработчика.
Private DataServiceClient As AdventureWorksService.AdventureWorksLTEntities Private SalesQuery As System.Data.Services.Client.DataServiceQuery(Of AdventureWorksService.SalesOrderHeader) Private OrdersViewSource As CollectionViewSource Private Sub Window_Loaded(ByVal Sender As Object, ByVal e As RoutedEventArgs) Handles MyBase.Loaded ' TODO: Modify the port number in the following URI as required. DataServiceClient = New AdventureWorksService.AdventureWorksLTEntities( _ New Uri("https://localhost:32415/AdventureWorksService.svc")) SalesQuery = DataServiceClient.SalesOrderHeaders OrdersViewSource = CType(Me.FindResource("SalesOrderHeadersViewSource"), CollectionViewSource) OrdersViewSource.Source = SalesQuery.Execute() OrdersViewSource.View.MoveCurrentToFirst() End Sub
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("https://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 следующим кодом.
If OrdersViewSource.View.CurrentPosition > 0 Then OrdersViewSource.View.MoveCurrentToPrevious() End If
if (ordersViewSource.View.CurrentPosition > 0) ordersViewSource.View.MoveCurrentToPrevious();
Вернитесь в конструктор и дважды щелкните кнопку >.
Visual Studio откроет файл кода программной части и создаст новый обработчик событий nextButton_Click для события Click.
Замените созданный обработчик событий nextButton_Click следующим кодом.
If OrdersViewSource.View.CurrentPosition < CType(OrdersViewSource.View, CollectionView).Count - 1 Then OrdersViewSource.View.MoveCurrentToNext() End If
if (ordersViewSource.View.CurrentPosition < ((CollectionView)ordersViewSource.View).Count - 1) { ordersViewSource.View.MoveCurrentToNext(); }
Сохранение изменений, внесенных в записи о продажах
Добавьте код, который позволяет просматривать и сохранять изменения, внесенные в записи о продажах, с помощью кнопки Сохранить изменения.
Чтобы добавить возможность сохранения изменений, внесенных в записи о продажах, выполните следующие действия
В конструкторе дважды щелкните кнопку Сохранить изменения.
Visual Studio откроет файл кода программной части и создаст новый обработчик событий saveButton_Click для события Click.
В обработчик событий saveButton_Click добавьте следующий код.
Dim CurrentOrder As AdventureWorksService.SalesOrderHeader = CType(OrdersViewSource.View.CurrentItem, AdventureWorksService.SalesOrderHeader) DataServiceClient.UpdateObject(CurrentOrder) DataServiceClient.SaveChanges()
AdventureWorksService.SalesOrderHeader currentOrder = (AdventureWorksService.SalesOrderHeader)ordersViewSource.View.CurrentItem; dataServiceClient.UpdateObject(currentOrder); dataServiceClient.SaveChanges();
Тестирование приложения
Постройте и запустите приложение, чтобы проверить, имеется ли возможность просматривать и обновлять записи о клиентах.
Проверка работы приложения
В меню Построение выберите команду Построить решение. Убедитесь в том, что проект строится без ошибок.
Нажмите сочетание клавиш CTRL+F5.
Visual Studio запустит проект AdventureWorksService без отладки.
В обозревателе решений щелкните правой кнопкой мыши проект AdventureWorksSalesEditor.
В контекстном меню в разделе Отладка щелкните команду Запустить новый экземпляр.
Запустится приложение. Проверьте следующее:
В текстовых полях отобразятся различные поля данных из первой записи о продаже с идентификатором заказа на продажу 71774.
С помощью кнопок > и < можно перемещаться по другим записям о продажах.
В одной из записей о продажах введите некий текст в поле Примечание, затем щелкните Сохранить изменения.
Закройте приложение и запустите его вновь в Visual Studio.
Перейдите к измененной записи о продаже и проверьте, сохранилось ли изменение после завершения работы и перезапуска приложения.
Закройте приложение.
Следующие действия
После прохождения этого пошагового руководства можно выполнить следующие действия:
Выясните, как использовать окно Источники данных в Visual Studio для привязки элементов управления WPF к источникам данных других типов. Дополнительные сведения см. в разделах Пошаговое руководство. Привязка элементов управления WPF к модели EDM и Пошаговое руководство. Привязка элементов управления WPF к набору данных.
Выясните, как использовать окно Источники данных в Visual Studio для отображения связанных данных (т. е. данных в иерархических отношениях) в элементах управления WPF. Дополнительные сведения см. в разделе Пошаговое руководство. Отображение связанных данных в приложении WPF.
См. также
Задачи
Практическое руководство. Привязка элементов управления WPF к данным в Visual Studio
Пошаговое руководство. Привязка элементов управления WPF к модели EDM
Пошаговое руководство. Привязка элементов управления WPF к набору данных
Основные понятия
Привязка элементов управления WPF к данным в Visual Studio
Общие сведения о конструкторах WPF и Silverlight
Общие сведения о связывании данных