Я надеюсь, что вы, ребята, можете помочь мне, как я не могу найти что-нибудь полезное, что помогает с пониманием моей проблемы:Список + Детали - лучший подход?
Я пытаюсь реализовать пассивный подход MVP в моем приложении # WinForms C, который имеет представление списка и соответствующие подробные представления.
До сих пор я получил следующую структуру (псевдо-код):
ListPresenter(new Repository(), new ListView(), new DetailPresenter(new DetailView());
Реализация:
public class UserDetailPresenter : IPresenter<IUserDetailView>
{
private IDetailView _view;
public UserDetailPresenter(IDetailView detailView)
{
_view = detailView;
}
public void Show(IUser user)
{
InitializeView(user);
_view.Show();
}
}
public class UserListPresenter
{
//private members (_userRepo, _listView, _detailPresenter)
public UserListView(IUserRepository userRepo, IListView listView, IDetailPresenter detailPresenter)
{
//wire up private members..
_listView.EditCommandFired += this.ShowEditForm;
}
private void OnListViewEditCommandFired(object sender, EventArgs args)
{
_detailPresenter.LoadUser(_listView.SelectedUser);
_detailPresenter.Show(); //modal
}
}
public class UserListForm : Form, IUserListView
{
public event EventHandler EditCommandFired;
public IUser SelectedUser { get { return gridView.FocusedRowHandle as IUser; } }
public void LoadUsers(List<IUser> users)
{
gridView.DataSource = users;
}
// other UI stuff
}
Моей проблемы: я могу только показать форму редактирования сразу. Как только я попытаюсь открыть его во второй раз, мой вид (форма) будет удален (System.ObjectDisposedException).
Как это исправить? Есть ли у меня неправильный подход? Отменить ли я форму закрытия и просто скрыть ее и доверять сборщику мусора, чтобы собрать ее после удаления DetailPresenter
? Я создаю (новый() вверх) новый ведущий каждый раз при запуске события Edit
? Тогда я должен был бы ввести какой-то завод, поскольку я как-то теряю инъекцию зависимости. Я бы уклонился, если бы кто-нибудь мог указать, как будет выглядеть лучшая практика в этом случае и что я могу делать неправильно здесь.
просьба предоставить больше сотрудничества де-то мы могли бы скопировать пасту в наш VS и выполнить, чтобы увидеть, что происходит точно. –
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –