Работа с DataGrid в Silverlight с использованием ADO.NET и WCF - Создание обратного вызова (Callback)

ОГЛАВЛЕНИЕ

Создание обратного вызова (Callback)

Вы наверняка обратили внимание на предыдущем рисунке, что прямо под методом GetEmployeeAsync Intellisense указывает метод GetEmployeeCompleted. Данный метод вызывается тогда, когда завершается метод Asynchronous,  и, регистрируя данное событие, вы можете получить список сотрудников и привязать их к сетке с данными в вашем обработчике события.

Поэтому файл Page.xaml.cs должен выглядеть следующим образом,

using System;
using System.Windows;
using System.Windows.Controls;
 
namespace EntitiesSvcGrid
{
   public partial class Page : UserControl
   {
      public Page()
      {
         InitializeComponent();
         Loaded += new RoutedEventHandler( Page_Loaded );
      }
 
      void Page_Loaded( object sender, RoutedEventArgs e )
      {
         EmployeeWebService.EmployeeWebServiceClient ws = new
           EntitiesSvcGrid.EmployeeWebService.EmployeeWebServiceClient();
         ws.GetEmployeesCompleted +=
            new EventHandler<EntitiesSvcGrid.EmployeeWebService.
            GetEmployeesCompletedEventArgs>( ws_GetEmployeesCompleted );
         ws.GetEmployeesAsync();
        
      }
 
      void ws_GetEmployeesCompleted(
         object sender,
         EntitiesSvcGrid.EmployeeWebService.GetEmployeesCompletedEventArgs e )
      {
         dg.ItemsSource = e.Result;
      }
   }
}

Задачей обработчика события будет связывание результата Result (полученного при помощи параметра GetEmployeeCompletedEventArgs и который является  типа observableCollection<Employee>), к свойству ItemSource табличной сетки.

Рисунок 9-7. Элемент источника (ItemSource)

 

Обзор результата

Когда вы скомпилируете проект информация будет извлечена из базы данных, и результат будет ограничиваться лямбда-выражением. Он будет доступен посредством веб-сервиса и привязан к элементу управления DataGrid.

Рисунок 9-8. DataGrid

Хотя внешний вид приложения недоработан (к примеру, колонки не имеют названия, и мы не модернизировали пользовательский интерфейс стилями либо шаблонами) вся основная функциональность работает идеально, включая сортировку, к примеру, для колонки с датой, указывающей, когда сотрудник был нанят (HireDate).

Скачать исходный код примеров

Jesse Liberty