Я пытаюсь реализовать шаблон MVP (Passive View) в приложении Winforms.
Насколько я понял, в реализации MVP Passive View View не знает о Presenter.Поэтому мне нужно как-то с этим поговорить!Я использовал события для этого.
Теперь вот моя проблема!Когда событие TextChanged запускается в View, поле FileName изменяется к тому времени, когда метод OnSetName () вызывается в моем Presenter!Разве это не вызывает проблем!Я думал, что View в MVP останется полностью пассивным!
Скажем, я хочу иметь логику в моем Presenter, чтобы избежать принятия определенных имен!Но когда я достигаю метода OnSetName (), у меня нет шансов, потому что он уже установлен!
public partial class Form1 : IPassiveView
{
public Form1()
{
InitializeComponent();
}
public string FileName
{
get => textEdit1.Text;
set => textEdit1.Text = value;
}
public event EventHandler<string> NameChanged;
private void textEdit1_EditValueChanged(object sender, EventArgs e)
{
OnNameChanged(FileName);
}
protected virtual void OnNameChanged(string e)
{
NameChanged?.Invoke(this, e);
}
}
public interface IPassiveView
{
string FileName { get; set; }
event EventHandler<string> NameChanged;
}
public sealed class Presenter
{
private readonly IPassiveView _view;
public Presenter(IPassiveView view)
{
_view = view;
_view.NameChanged += (sender, s) => OnSetName(s);
}
public void OnSetName(string name)
{
_view.FileName = name;
}
}