Вопрос

Я пытаюсь создать своего рода интерфейс пользователя / мастера, используя шаблон MVP. У меня есть обычные подозреваемые:

interface IMainView{}
class MainView: Form, IMainView{}

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

У меня также есть UserControl, который также является представлением своей собственной триады MVP:

interface ISubView{}
class SubView: UserControl, ISubView{}

interface ISubPresenter{}
class SubPresenter{}

MainPresenter создает и экземпляр SubPresenter, который, в свою очередь, создает экземпляр SubView. Моя проблема в том, что представления не содержат ссылок друг на друга и даже не знают, что существуют. Они знают только о своих собственных докладчиках, но я хочу прикрепить одно представление, которое является UserControl, к другому представлению, которое является формой. Возможно ли это сделать и при этом поддерживать невежество друг друга по отношению друг к другу?

До этого момента все представления отображали свойства, необходимые каждому докладчику, в качестве системных типов, поэтому докладчики не были бы затронуты, если бы ListBox был изменен на ComboBox или RadioGroup. Я бы хотел оставить это так, если это возможно, но я готов нарушить эту модель, если у меня нет другого выбора.

Мои причины для этого - MainView представляет пользователю коллекцию объектов. Каждый объект может быть одним из нескольких (более 50) разных классов. Все будут реализовывать общий интерфейс, но пользовательский интерфейс для управления каждым объектом будет зависеть от базового класса.

Кстати, это приложение Winforms, предназначенное для .NET 2.0 (хотя оно скомпилировано как C # 3.0)

Это было полезно?

Решение

Я решил эту проблему, передав субпредставителю ссылку на его представление главному докладчику, который затем передает его своему представлению, которое затем назначает его пустой панели.

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

Он передается как обычный старый объект, поэтому ни одному из докладчиков не нужно включать ссылки на пространство имен winforms. MainView просто предполагает, что он является потомком UserControl, и приводит его в соответствие с этим.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top