Проблемы с пониманием Passive-View в MVP Winforms C # - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь реализовать шаблон 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;
    }
}
...