Я хочу отключить кнопку (или другой элемент управления), когда пользователь не может поднять событие. Каков наилучший способ сделать это? Просмотреть дескрипторы, которые или презентатор должны передать значение по виду в представлении, а затем просмотреть, обновит состояние управления.Как установить состояние управления в MVP
Например, если предыдущий запрос еще не закончен, пользователь не должен начинать новый.
Вариант 1:
interface IView
{
event EventHandler Event;
}
class View : IView
{
private readonly Button _button;
public event EventHandler Event;
public void button_Click(object sender, EventArgs e)
{
_button.Enabled = false;
if(Event != null)
{
Event(this, EventArgs.Empty);
}
_button.Enabled = true;
}
}
class Presenter
{
public void View_Event(object sender, EventArgs e)
{
// code...
}
}
Вариант 2:
interface IView
{
event EventHandler Event;
bool CanRaiseEvent { set; }
}
class View : IView
{
private readonly Button _button;
public event EventHandler Event;
public bool CanRaiseEvent
{
set
{
_button.Enabled = value;
}
}
public void button_Click(object sender, EventArgs e)
{
if (Event != null)
{
Event(this, EventArgs.Empty);
}
}
}
class Presenter
{
private readonly IView _view;
public void View_Event(object sender, EventArgs e)
{
_view.CanRaiseEvent = false;
// code...
_view.CanRaiseEvent = true;
}
}
Я знаю, что я должен проверить в состоянии Presenter-запрос перед выполнением следующего запроса, но я хочу, чтобы сообщить мнение, что пользователь не должен даже пытаться.
Мне кажется, что логика должна быть внутри ведущего. Таким образом, вариант 2 лучше. – chenop