сначала загрузите сетку, затем выполните асинхронную операцию на каждом тайле - PullRequest
1 голос
/ 13 февраля 2012

У меня есть небольшое приложение, в котором у меня есть gridview. Сетка привязана к источнику, который выглядит следующим образом (список):

Person {имя; Эл. адрес; orders;} - заказы являются IEnumerable.

Теперь проблема в том, что я хочу, чтобы сетка загружалась без предварительной загрузки списка заказов. Это где aysnc входит в картину. Когда сетка загрузится и покажет имена людей и адрес электронной почты, тогда она должна за кулисами начать загружать заказы от каждого человека. Когда заказы будут готовы, они должны быть показаны.

Я пробовал пару способов:

  1. загрузить все с помощью асинхронного, это нормальный подход, но сетка сначала показывает, когда все данные в источнике готовы. Зачем ?

  2. загрузить источник лиц (список) без списка заказов и попытаться загрузить заказы для каждого человека после отображения сетки. Я не могу этого сделать, потому что я не могу найти правильный «крючок», в WebForms сетка данных будет иметь событие «OnItemDataBound», в которое я могу зацепиться. Любая подсказка?

  3. Диспетчер закулисного материала ... в сложный и жесткий.

Это может быть функция управления, которую я упустил.

Любая помощь очень ценится. На данный момент код недоступен (забыли дома :))

1 Ответ

1 голос
/ 13 февраля 2012

Вот как бы я это сделал (в SILVERLIGHT):

  1. Выполните асинхронный вызов и загрузите список Persons с пустой ObservableCollection для каждого из заказов ... GridView показывает данные (Имя, Электронная почта).
  2. Когда асинхронный вызов Persons сделан, сделайте второй вызов для заказов, когда он возвращается, заполните каждую пустую коллекцию Orders соответствующими заказами.

Если вы используете ObservableCollection, то Order будет отображаться при заполнении каждой коллекции. Я предполагаю, что у вас есть какой-то ключ, чтобы определить, какие заказы поступают с каким человеком.

Было бы что-то вроде этого, когда вернулись заказы:

For Each p As Person In PersonsList
   Dim id = p.PersonId
   p.Orders = (From o As Order in OrdersList Where o.PersonId = id).ToList
Next

Это код псевдо-vb, и это только пример. По сути, ключ состоит в том, чтобы использовать ObservableCollection для заказов вместо общего IEnumerable, чтобы коллекция обновлялась, когда вы что-то добавляете или удаляете из нее.

...