Отображение данных в DataGrid при помощи LINQ и WCF в Silverlight - Асинхронный вызов сервиса
ОГЛАВЛЕНИЕ
Асинхронный вызов сервиса
Вызов веб-сервиса из Silverlight можно сделать только асинхронно (в принципе, так и должно быть, поскольку вы работаете в обозревателе и не можете себе позволить блокировку!)
Первым заданием будет получить ссылку на Service1Client . Вы можете исследовать это в обозревателе объектов, чтобы удостовериться в том, что это именно тот объект, который содержит асинхронные методы (Asynchronous), необходимые нам,
Рис. 3-17. Клиент веб-сервиса в обозревателе (изображение немного обрезано для экономии места)
Мы присвоим Service1Client локальному объекту webService:
void Search_Click(object sender, RoutedEventArgs e)
{
ServiceReference1.Service1Client webService =
new SQLData.ServiceReference1.Service1Client();
Далее мы используем webService для настройки обработчика события для метода, который будет вызван тогда, когда вызывается событие GetCustomersByLastNameCompleted:
webService.GetCustomersByLastNameCompleted +=
new EventHandler<SQLData.ServiceReference1.
GetCustomersByLastNameCompletedEventArgs>
(webService_GetCustomersByLastNameCompleted);
Наконец-то мы выполнили асинхронный вызов
webService.GetCustomersByLastNameAsync(LastName.Text);
}
Когда сервис завершает действие, то вызывается событие GetCustomersByLastNameCompleted, а также наш метод. Тщательно составленный список клиентов сохранен в e.Result, который мы присвоим свойству ItemSource элемента DataGrid и все привязки будут теперь иметь источник, к которому они могут соединяться.
void webService_GetCustomersByLastNameCompleted(
object sender,
SQLData.ServiceReference1.GetCustomersByLastNameCompletedEventArgs e)
{
theDataGrid.ItemsSource = e.Result;
}
Рис. 3-18. Запущенная программа
Готово!
Создание такого приложения, даже с использованием Styles и многого другого для придания более изящного вида, станет минутным делом, как только вы узнаете, как просто это делается!