Poszukuję porady dotyczącej używania zdarzeń do połączenia elementów we wzorcu MVP (pasywny)
kawałek kodu:
public interface IFormView
{
string AccountName { get; set; }
string AccountLogin { get; set; }
string AccountPassword { get; set; }
event EventHandler BaseAccountListIndexChanged;
}
public partial class frmAccountEditor : Form, IFormView
{
private EditorPresenter _presenter;
private Model _model;
public string AccountName //powiązania do textboxów
public string AccountLogin //powiązania do textboxów
public string AccountPassword //powiązania do textboxów
public event EventHandler BaseAccountListIndexChanged;
//zmiana indexu w listboxie lstEditorAvailableAccounts
private void lstEditorAvailableAccounts_SelectedIndexChanged(object sender, EventArgs e)
{
if (BaseAccountListIndexChanged != null)
{
BaseAccountListIndexChanged(this.lstEditorAvailableAccounts.SelectedIndex, EventArgs.Empty);
//BaseAccountListIndexChanged((sender as ListBox).SelectedIndex, EventArgs.Empty); - może tak?
}
}
}
public class FormAccountEditorPresenter
{
IFormView _formView;
IModel _model;
FormAccountEditorPresenter(IFormView view, IModel model)
{
this._formView = view;
this._model = model;
this._formView.BaseAccountListIndexChanged += this.OnBaseAccountListIndexChanged;
}
public void OnBaseAccountListIndexChanged(object sender, EventArgs e)
{
int index = 0;
if (sender.GetType() == typeof(Int32)) index = (int)sender;
//zwraca wartości z listy w modelu pod danym indexem do właściwości widoku
this._formView.AccountName = this._model.GetBaseAccountAt(index).Name;
this._formView.AccountLogin = this._model.GetBaseAccountAt(index).Login;
this._formView.AccountPassword = this._model.GetBaseAccountAt(index).Password;
}
Czy to jest dobre rozwiązanie? Bo coś czuję, że w widoku gdy korzystam ze zdarzenia zmiany indexu listboxa tworzę jakąś incepcję.
I jeszcze inne pytanie: w takim przypadku gdy muszę przekazać w zdarzeniu nr indexu lepiej korzystać z przekazywanego obiektu czy tworzyć CustomEventArgs : EventArgs i tu przekazywać index?
Pyt. 3: Zakładając, że korzystam z tych CustomEventArgs w interfejsie, to klasa CustomEventArgs powinna się znajdować w osobnym pliku czy może być w tym samym co interfejs? (w przypadku gdy korzystają z niej tylko klasy dziedziczące po tym interfejsie)