我正在尝试在 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;
}
}