Работа с DataGrid в Silverlight с использованием ADO.NET и WCF - Привязка к DataGrid

ОГЛАВЛЕНИЕ

Привязка к DataGrid

Чтобы сохранить простоту пользовательского интерфейса мы просто перетащим DataGrid из инструментария на Page.xaml как и другие элементы интерфейса данного приложения. Перетаскивание элемента имеет некоторое преимущество перед заданием вручную - Visual Studio добавит соответствующее пространство имен.

xmlns:data="clr-namespace:System.Windows.Controls;assembly = System.Windows.Controls.Data"  

Добавьте название для вашей сетки (x:Name=”dg”) и уберите высоту и ширину окружающего пользовательского элемента управления (UserControl). Здесь я привел исходный код для Page.xaml

<UserControl
xmlns:data="clr-namespace:System.Windows.Controls;assembly = System.Windows.Controls.Data"
x:Class="EntitiesSvcGrid.Page"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid x:Name="LayoutRoot" Background="White">  
        <data:DataGrid x:Name="dg" />
</Grid>
</UserControl>

Привязка данных к DataGrid

Завершаем мы все в Page.xaml.cs, где вам необходимо будет привязать данные из веб-сервиса к данным табличной сетки.

Первым шагом будет добавление к этому проекту ссылки на веб-сервис. Для этого щелкните правой кнопкой мыши по ServiceReferences и в диалоговом окне Add Service Reference щелкните по Discover. Созданный ранее веб-сервис (EmployeeWebService) появится в списке. Щелкните по нему и затем переименуйте пространство имен на EmployeeWebService.

Рисунок 9-5. Добавление ссылки на сервис

Нажмите на OK для того, чтобы добавить ссылку на сервис и откройте Page.xaml.cs.

Я склонен к настройке обработчиков в событии Loaded вместо того, чтобы делать это в конструкторе, хотя это может показаться вам старомодным,

using System;
using System.Windows;
using System.Windows.Controls;
 
namespace EntitiesSvcGrid
{
   public partial class Page : UserControl
   {
      public Page()
      {
         InitializeComponent();
         Loaded += new RoutedEventHandler( Page_Loaded );
      }

Нашей задачей теперь будет создание экземпляра клиента веб-сервиса и затем использование данного клиента для вызова метода GetEmployees.

Создание экземпляра клиента очень просто в исполнении,

EmployeeWebService.EmployeeWebServiceClient ws = new  
  EntitiesSvcGrid.EmployeeWebService.EmployeeWebServiceClient();

Хотя приложение Silverlight запускается в обозревателе, мы не можем осуществлять вызовы методов напрямую (вы не должны блокировать обозреватель), нам скорее необходимо осуществлять асинхронные вызовы. Intellisense не только предлагает нам альтернативу в видео асинхронных вызовов, но и не предлагает нам синхронные методы, которые мы создали!

Рисунок 9-6. Асинхронные вызовы