Pergunta

Eu estou tentando criar uma espécie de mestre / detalhe UI usando um padrão MVP. Eu tenho os suspeitos do costume:

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

interface IMainPresenter{}
class MainPresenter{}

// Numerous domain objects

Eu também tenho um UserControl que é também uma ideia de sua própria tríade MVP:

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

interface ISubPresenter{}
class SubPresenter{}

O MainPresenter cria e instância do SubPresenter, que por sua vez, cria uma instância de subexibição. Meu problema é a vista não contêm referências para o outro ou até mesmo conhecer uns aos outros existir. Eles só sabem sobre seus próprios apresentadores mas eu quero anexar um ponto de vista que é um UserControl para outra vista que é um formulário. Isso é possível fazer e ainda manter a ignorância de cada vista um do outro?

Até este ponto, todos os pontos de vista expuseram as propriedades necessárias por cada apresentador como tipos de sistema para que os apresentadores não seria afetada se um ListBox alterado para uma caixa de combinação ou um RadioGroup. Eu gostaria de mantê-lo desta forma, se possível, mas eu estou disposto a quebrar esse padrão se eu não tenho outra escolha.

As minhas razões para fazer isso é os presentes MAINVIEW o usuário com uma coleção de objetos. Cada objecto pode ser um de vários (mais de 50) classes diferentes. Tudo vai implementar uma interface comum, mas a interface do usuário para manipular cada objeto irá variar com a classe subjacente.

A propósito, esta é uma aplicação WinForms segmentação .NET 2.0 (é compilado como C # 3.0 embora)

Foi útil?

Solução

I resolvido este tendo o subpresenter passar uma referência para a sua posição para o apresentador principal, que, em seguida, passa-a para a sua posição, o qual então atribui-o a um painel vazio.

subView
  |
  V
subPresenter
  |
  V
mainPresenter
  |
  V
mainView

É passado como um objeto antigo simples assim nenhum dos apresentadores precisa incluir referências ao namespace winforms. O MAINVIEW simplesmente assume o seu um decedent de UserControl e lança-lo como tal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top