0

我正在尝试在 Winforms 应用程序中实现 MVP(被动视图)模式。

据我了解,在 MVP 的 Passive View 实现中,View 不知道 Presenter。所以我需要以某种方式与它交谈!我为此使用了事件。

现在这是我的问题!在 View 中触发 TextChanged 事件时,在我的 Presenter 中调用 OnSetName() 方法时会更改 FileName 字段!会不会出问题!我认为 MVP 中的 View 将保持完全被动!

假设我想在我的 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;
    }
}
4

0 回答 0