MVP WinForms

0

Witam
Zaczynam uczyć się wzorca MVP w przypadku WinForms. Otrzymałem konkretny przykład programu z tym wzorcem. I w widoku mam zdarzenia kliknięcia myszy na przycisku, takie coś:

 
  public event EventHandler Save;

  private void saveBt_Click(object sender, EventArgs e)
  {
       if (Save !=null)
                Save(this,EventArgs.Empty);
   }


Czy to jest poprawna konstrukcja ? Chodzi mi o to, że dalej zdarzenie jest w widoku obsłużone. Czy nie mamy możliwości czegoś podobnego do bindingu tylko, że odniesieniu przycisku ? Takie przyporządkowanie zdarzenia do przycisku. Aby nie obsługiwać tego jako kliknięcie myszy i przekazywanie do zdarzenia. Może moje wytłumaczenie nie jest jasne, ale może ktoś domyśli się o co mi chodzi.

0

Nie wiem o co chodzi, ani o co pytasz, ale w MVP w metodzie obsługującej kliknięcie przycisku powinieneś raczej wywołać metodę Prezentera, a nie rzucać zdarzenie.

0

W prezenterze mamy metodę, która jest wykonywana poprzez kliknięcie w widoku przycisku. Kod poniżej:

  protected override void InitializeView()
{
    _view.Save += _view_Save;
}
void _view_Save(object sender, EventArgs e)
{
           // cos tam
}
 

Wiem, że moje pytanie może być niezrozumiałe. Uczę się wzorca MVP, mam kod nie mojego autorstwa. Po prostu chce stwierdzić czy tak powinno to wyglądać.
Pozdrawiam

0

Nie widzę sensu w rzucaniu takich zdarzeń z widoków do prezenterów. Zdarzenie kliknięcia w przycisk jest szczegółem implementacji danej technologii GUI, więc nie powinno opuszczać widoku. A prezenter może zawierać normalne metody, które są wołane z widoku.
Zdarzeń można byłoby użyć co najwyżej w drugą stronę, aby np. wyświetlić na widoku informację o postępie/zakończeniu jakiegoś zadania w tle realizowanego przez prezenter.

0

Sama konstrukcja nie ma nic do wzorca MVP, jednak istnieje tutaj pewne ryzyko, jeżeli klasa jest używana w kilku wątkach i event Save może być modyfikowany. Powinno to wyglądać tak:

    var handler = this.Save;
    if (handler != null) handler(this, EventArgs.Empty);

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