У меня недавно была та же головоломка, но для дерева.
Чтобы решить эту проблему, вы должны использовать делегатов для управления созданием / преобразованием данных в визуальные элементы.
Пример:
class View
{
TreeNode Builder(object foo, object bar) { ... }
}
class Presenter
{
void InitView(View v)
{
Model.Build(v.Builder);
}
}
Хорошо, это очень грубо, но позволяет довольно легко создавать рекурсивные структуры, такие как деревья. :)
ПРИМЕЧАНИЕ: модель и вид на самом деле не заботятся о типах друг друга.