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

Odpowiedz Nowy wątek
2015-01-03 23:10
Zimny Młot
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?

Pozostało 580 znaków

2015-01-04 01:00
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ę.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-01-04 19:30
Mały Samiec
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;
edytowany 1x, ostatnio: somekind, 2016-12-13 18:26

Pozostało 580 znaków

2015-01-04 19:58

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();
    }
}

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2015-01-04 20:03
Krzywy Orzeł
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.

My wolimy proponować zakładanie kont. ;) - somekind 2015-01-04 20:18

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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