2016-02-18 3 views
1

Я хочу отключить кнопку (или другой элемент управления), когда пользователь не может поднять событие. Каков наилучший способ сделать это? Просмотреть дескрипторы, которые или презентатор должны передать значение по виду в представлении, а затем просмотреть, обновит состояние управления.Как установить состояние управления в 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

Мне кажется, что логика должна быть внутри ведущего. Таким образом, вариант 2 лучше. – chenop

ответ

1

Два теста «лакмуса», которые я использую для проектирования MVP: 1) Является ли логическая возможность проверки? и 2) Могу ли я заменить конкретный вид, и приложение все еще работает?

С этой точки зрения вариант 2 выглядит более привлекательным.

Смежные вопросы