Шаблон для иерархического поиска и отображения данных с использованием асинхронных вызовов? - PullRequest
0 голосов
/ 20 мая 2011

Контекст Silverlight / WPF, C #, .NET 4,

У меня есть 4-уровневое дерево миниатюр, которое мне нужно перечислить и отобразить некоторым осмысленным способом.Для синхронного выполнения (последовательный мир) мы можем думать так:

    Channels = Channels_Build("CHANNELS.XML");
    foreach Ch in Channels
    {
         Cats = Cats_Build( Ch.URL ) ;
         foreach Cat in Cats
         {
             PLs = PLs_Build( Cat.URL ) ;
             foreach PL in PLs
             {
                  Medias = Medias_Build( PL.URL ) ;
                  foreach Media in Medias 
                              display Media image
             }
       }
 }

.Однако у меня есть асинхронная модель загрузки для XML, изображений, ..., поэтому я думаю что-то вроде этого:связанный обратный вызов xxx_Loaded ()

Каждый канал имеет 1 или более категорий.Каждая категория имеет 1 или более плейлистов.Каждый PlayList имеет 1 или более медиа. Таким образом, у меня 4-уровневая иерархическая структура

Можно предположить, что каналы, кошки, PL и MediaList имеют общий базовый класс.

Должен ли я сложить эту логику 4x в один метод рекурсивной сборки?Как?Мне бы пришлось заставить процесс сборки передавать некоторую информацию (родительский узел) соответствующему обратному вызову (я посмотрел IAsyncResult.AsyncState)

Мой мозг заблокирован, и я не могу думать о том, что здесь нужно?рекурсия ?, передача информации в асинхронные вызовы, конкретный шаблон ?, ...

Стоит ли сначала строить данные дерева в памяти, в одну структуру?или это будет полезно, только если я решу использовать элемент управления TreeView?Что, если я решу отобразить информацию, используя повторяющийся шаблон, например, в списке.Шаблон будет отображать:

Channel-Image+Name
        Category-Image+Name
                PlayList-Image+Name
                        MediaList images...

Да, неконечные узлы будут повторяться визуально вниз по списку.Это нормально, поскольку может предоставить карту, которую я ищу.

Таким образом, остается загадочный вопрос: как мне перейти к перечислению и отображению всех узлов в этой модели Async?

Спасибо.

1 Ответ

0 голосов
/ 20 мая 2011

Я бы посмотрел на обновление Async CTP, которое сильно упрощает эту работу

...