Как мне представить иерархические данные из элемента управления TreeView для докладчика MVP? - PullRequest
1 голос
/ 18 июня 2009

У меня есть некоторые иерархические данные в элементе управления Winforms TreeView, и мне нужно представить его как свойство, чтобы мой докладчик мог синхронизировать изменения в нем.Просто чтобы прояснить, я использую шаблон Passive View .С большинством элементов управления WinForm это не сложно.Сами элементы управления представляют свои данные в виде системного типа, который может быть легко передан докладчику.TreeViews, из-за их сложности, не легко сопоставляются с типом системы.Я искал тип коллекции фреймворка, но дерево, похоже, было упущено.(Похоже, Microsoft использует древовидные структуры под капотом для нескольких классов более высокого уровня, но предпочла не создавать семейство классов общего назначения Tree .)

В любом случае данные, которые я пытаюсь использоватьэкспозиция никогда не бывает глубже двух узлов, поэтому я даже не уверен, что буду продолжать использовать TreeView.Тем больше причин, чтобы не связывать докладчика с TreeNodeCollection.

Я уже выдвинул несколько идей, но я просто хотел отослать их от сообщества SO:

  • Представьте дерево как коллекцию коллекций ... скажем, словарь списков.
  • Создайте пользовательскую древовидную структуру, вводя зависимость в представление в процессе.

ВерхУровни узлов будут в среднем 5-10 записей, в то время как их дочерние узлы теоретически могут достигать 50, но на практике не превысят 3 или 4.

Есть предложения?

Ответы [ 3 ]

3 голосов
/ 20 июня 2009

Я думаю, вы должны думать в обратном направлении: как докладчик должен представить иерархическую структуру для представления . И вы должны думать о представлении в абстрактных терминах и не слишком концентрироваться на конкретной реализации (TreeView в вашем случае). Обычно, когда вы начинаете реализовывать вещи с использованием шаблона MVP, вы начинаете писать логику презентатора, одновременно определяя интерфейс представления. В идеале вы должны сделать это, используя TDD и фиктивную реализацию представления. Только тогда вы реализуете конкретное представление (форма Windows или элемент управления).

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

В вашем случае реализация представления может использовать свойство Tag TreeViewNode для отображения между узлами TreeView и элементами вашей модели.

0 голосов
/ 18 июня 2009

Если это приложение, зависящее от производительности, я бы посоветовал снова использовать коллекции на основе дерева

0 голосов
/ 18 июня 2009

Вот ссылки на три бесплатные библиотеки .NET, которые содержат реализации коллекций деревьев:

У меня нет опыта ни с одним из них.

...