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?
Pokazanie widoku po wciśnięciu przycisku na innym widoku
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
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ę.
- Rejestracja: dni
- Ostatnio: dni
@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;
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
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();
}
}
- Rejestracja: dni
- Ostatnio: dni
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.