C# 在MVP中,演示者是否可以直接通过界面访问用户控件?
我遇到了一个问题,就是在仍然遵循MVP设计模式的情况下,试图在按钮上显示用户控件,就像从菜单上单击一样。我所需要做的就是在单击按钮时将用户控件放在前面,但是应该在哪里处理呢?我想让用户控件在单击按钮时调用“this.BringToFront()”,但我相信这会打破被动视图。我还尝试了以下使用事件的方法: 由ItipManager接口的视图C# 在MVP中,演示者是否可以直接通过界面访问用户控件?,c#,winforms,mvp,C#,Winforms,Mvp,我遇到了一个问题,就是在仍然遵循MVP设计模式的情况下,试图在按钮上显示用户控件,就像从菜单上单击一样。我所需要做的就是在单击按钮时将用户控件放在前面,但是应该在哪里处理呢?我想让用户控件在单击按钮时调用“this.BringToFront()”,但我相信这会打破被动视图。我还尝试了以下使用事件的方法: 由ItipManager接口的视图 public partial class Form1 : Form, ITipManager { public event Event
public partial class Form1 : Form, ITipManager
{
public event EventHandler homeButtonClicked;
public event EventHandler addTipButtonClicked;
public event EventHandler transactionButtonClicked;
public event EventHandler analysisButtonClicked;
public Form1()
{
InitializeComponent();
}
private void AddButton_Click(object sender, EventArgs e)
{
EventHandler handler = addTipButtonClicked;
handler?.Invoke(this, e);
}
TipManagerPresenter,唯一的任务是处理按钮点击
class TipManagerPresenter
{
private ITipManager tipManagerView;
private AddTip addTipControl;
private Home homeControl;
public TipManagerPresenter(ITipManager tipManagerView, AddTip addTipControl, Home homeControl)
{
this.tipManagerView = tipManagerView;
this.addTipControl = addTipControl;
this.homeControl = homeControl;
tipManagerView.addTipButtonClicked += new EventHandler(OnAddTipButtonClicked);
tipManagerView.homeButtonClicked += new EventHandler(OnHomeButtonClicked);
}
public void OnAddTipButtonClicked(object sender, EventArgs e)
{
addTipControl.BringToFront();
}
public void OnHomeButtonClicked(object sender, EventArgs e)
{
homeControl.BringToFront();
}
}
我相信上面的代码也打破了MVP模式,因为我让演示者直接访问用户控件,而不是通过界面。这两种方法中有哪一种是好的还是有更好的解决方案?这两种方法
public void OnAddTipButtonClicked(object sender, EventArgs e)
{
addTipControl.BringToFront();
}
public void OnHomeButtonClicked(object sender, EventArgs e)
{
homeControl.BringToFront();
}
如果您要更新视图中不需要在Presenter
层中执行任何操作/逻辑的内容,则只需在视图中执行即可
例如,如果你需要在你的视野中展示任何东西,你可以在那里做
如果您需要一个处理演示者的结果来突出该ui元素,那么在演示者内部处理它是一个很好的做法。好的,我将在视图中处理它,谢谢!不使用参数是否存在固有的问题?我还有其他类以这种方式订阅事件,它们不需要任何参数。如果不需要这些参数,请将它们从接口中删除,因为初始化需要内存,并且在阅读代码时可能会给其他人造成一些混乱