Pokazanie widoku po wciśnięciu przycisku na innym widoku

1

Mam aplikację która ma kilka form i dla każdej formy jest odpowiadający mu presenter. Teraz mam przycisk na jednej z formie, chciałbym tak zrobić żeby po kliknięciu w tą forme pojawiła sie inna forma. Jak to zrobić aby program był zgodny z wzorcem MVP?

1

Ja to robię tak, że PresenterA (ten od IViewA) ma metodę ShowViewB, która wywołuje metodę IViewNavigator wyświetlającą IViewB. Implementacja IViewNavigator siedzi tam gdzie implementacje wszystkich widoków, więc potrafi utworzyć i wyświetlić formę.

0

@somekind czy dobrze zrozumiałem, że powinno to wyglądać tak:

// Presenter Layer
interface IViewNavigator 
{
      void ShowViewByName(string viewName);
}
 
class PresenterA
{
   public IViewNavigator Navigator { get; set;} ;
   
   void ShowViewB()
   {
         Navigator.ShowViewByName("ViewB");
    }
}

// View Layer
public Navigator : IViewNavigator
{
void ShowViewByName(string viewName)
{
 // tutaj tworze okna
}
}

int main()
{
var n = new Navigator;
var pA = new PresenterA();
pA.Navigator = n;
2

Prawie dobrze, ale nie rób czegoś takiego jak ShowViewByName, bo to tylko źródło potencjalnych problemów z jakimiś magicznymi stringami. Metody powinny być konkretne i jasno mówiące co robią.
I nie ma też po co robić z Navigatora publicznej właściwości. To tylko klasa pomocnicza dla prezentera, używana wewnętrznie, więc trzymaj go w prywatnym polu i ustawiaj w konstruktorze.

// Presenter Layer
interface IViewNavigator 
{
      void ShowViewB();
      void ShowViewC(SomeObject additionalDataForView);
}
 
class PresenterA
{
   public IViewNavigator navigator;

   public PresenterA(IViewNavigator viewNavigator)
   {
        this.navigator = viewNavigator;
   }
   
   publc void ShowViewB() // To wołamy z widoku
   {
         this.navigator.ShowViewB();
    }
}
0

Ok, dziękuje za wyjaśnienie :) Dajcie mu ktoś plusa.

Offtopując, z wiadomych przyczyn wiadomo, że nie zarejestrowany użytkownik nie może zaakceptować odpowiedzi, ale co myślicie o tym aby dodać taką opcję jak: "Zaproponuj zaakceptowanie posta", taką opcję mogłby wybrać niezarejestrowany, a jak np 3 zarejestrowanych lub moderator uzna że jest to prawidłowa odpowiedź to dostaje wtedy ptaszka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1