Привязка элементов управления WPF к службе данных WCF
В этом пошаговом руководстве вы создадите приложение WPF, содержащее элементы управления с привязкой к данным. Элементы управления привязаны к записям клиентов, которые инкапсулируются в службе данных WCF. Вы также добавите кнопки, позволяющие клиентам просматривать и обновлять записи.
В этом пошаговом руководстве рассматриваются следующие задачи:
Создание модели данных с использованием сущностей (EDM), сформированной из данных в учебной базе данных AdventureWorksLT.
Создание службы данных WCF, которая предоставляет данные в модели данных сущности приложению WPF.
Создание набора элементов управления с привязкой к данным путем перетаскивания элементов из окна Источники данных в конструктор WPF.
Создание кнопок для перехода вперед и назад по записям клиентов.
Создание кнопки, которая сохраняет изменения данных в элементах управления в службе данных WCF и базовом источнике данных.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в этой статье. Возможно, вы используете другой выпуск Visual Studio или разные параметры среды. Дополнительные сведения см. в разделе Персонализация среды IDE.
Необходимые компоненты
Для выполнения этого пошагового руководства требуются следующие компоненты:
Visual Studio
Доступ к запущенному экземпляру SQL Server или SQL Server Express с подключенной учебной базой данных AdventureWorksLT. Чтобы скачать базу данных, см . примеры баз данных AdventureWorks
Перед изучением приведенных ниже концепций будет полезно, хотя и не обязательно, ознакомиться со следующим пошаговым руководством.
Модели данных в службы данных WCF.
Модели EDM и ADO.NET Entity Framework. Дополнительные сведения см. в обзоре Entity Framework.
Привязка данных WPF. Более подробную информацию см. в разделе Общие сведения о привязке данных.
Создание проекта службы
Запустите это пошаговое руководство, создав проект веб-приложения C# или Visual Basic ASP.NET. Назовите проект AdventureWorksService.
В обозревателе решений щелкните правой кнопкой мыши Default.aspx и выберите пункт Удалить. Этот файл не нужен для пошагового руководства.
Создание модели данных сущности для службы
Чтобы предоставить данные приложению с помощью службы данных WCF, необходимо определить модель данных для службы. Служба данных WCF поддерживает два типа моделей данных: модели данных сущностей и пользовательские модели данных, определенные с помощью объектов среды CLR, реализующих IQueryable<T> интерфейс. В данном пошаговом руководстве вы создадите модель EDM для использования в качестве модели данных.
В меню Проект выберите Добавить новый элемент.
В списке "Установленные шаблоны" щелкните Данные и выберите элемент проекта Модель ADO.NET EDM.
Измените имя
AdventureWorksModel.edmx
на и нажмите кнопку "Добавить".Открывается Мастер моделей EDM.
На странице Выбор содержимого модели щелкните Создать из базы данных и нажмите кнопку Далее.
На странице Выбор подключения к базе данных выберите один из следующих параметров:
Если подключение к образцу базы данных AdventureWorksLT доступно в раскрывающемся списке, выберите его.
Щелкните Создать подключение и создайте подключение к базе данных AdventureWorksLT.
На странице выбора подключения к данным убедитесь, что выбран параметр "Сохранить подключение сущности" в App.Config, а затем нажмите кнопку "Далее".
На странице Выбор объектов базы данных разверните узел Таблицы и выберите таблицу SalesOrderHeader.
Нажмите кнопку Готово.
Создание службы
Создайте службу данных WCF для предоставления данных в модели данных сущности приложению WPF:
В меню Проект выберите команду Добавить новый элемент.
В списке Установленные шаблоны щелкните Веб-сайт и выберите элемент проекта Служба данных WCF.
В поле "Имя" введите
AdventureWorksService.svc
и нажмите кнопку "Добавить".Visual Studio добавляет проект
AdventureWorksService.svc
.
Настройка службы
Вам нужно настроить службу для использования созданной модели EDM:
В файле кода замените
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 добавляет узлы, которые представляют данные, возвращаемые службой в окно Источники данных.
Определение пользовательского интерфейса
Добавьте несколько кнопок в окно, изменив в 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 и код, который создает набор элементов управления, привязанных к данным в таблице Продукт. Дополнительные сведения о созданном XAML и коде см. в разделе Привязка элементов управления WPF к данным в Visual Studio.
Щелкните в конструкторе текстовое поле рядом с меткой Идентификатор клиента.
В окне "Свойства" установите флажок рядом со свойством IsReadOnly.
Установите свойство IsReadOnly для каждого из следующих текстовых полей:
Номер заказа на поставку
Код заказа на продажу
Номер заказа на продажу
Загрузка данных из службы
Используйте прокси-объект службы для загрузки данных о продажах из службы. Затем назначьте возвращенные данные источнику данных в CollectionViewSource окне WPF.
В конструкторе, чтобы создать
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.