C# 在MVP中,演示者是否可以直接通过界面访问用户控件?

C# 在MVP中,演示者是否可以直接通过界面访问用户控件?,c#,winforms,mvp,C#,Winforms,Mvp,我遇到了一个问题,就是在仍然遵循MVP设计模式的情况下,试图在按钮上显示用户控件,就像从菜单上单击一样。我所需要做的就是在单击按钮时将用户控件放在前面,但是应该在哪里处理呢?我想让用户控件在单击按钮时调用“this.BringToFront()”,但我相信这会打破被动视图。我还尝试了以下使用事件的方法: 由ItipManager接口的视图 public partial class Form1 : Form, ITipManager { public event Event

我遇到了一个问题,就是在仍然遵循MVP设计模式的情况下,试图在按钮上显示用户控件,就像从菜单上单击一样。我所需要做的就是在单击按钮时将用户控件放在前面,但是应该在哪里处理呢?我想让用户控件在单击按钮时调用“this.BringToFront()”,但我相信这会打破被动视图。我还尝试了以下使用事件的方法:

由ItipManager接口的视图

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元素,那么在演示者内部处理它是一个很好的做法。

好的,我将在视图中处理它,谢谢!不使用参数是否存在固有的问题?我还有其他类以这种方式订阅事件,它们不需要任何参数。如果不需要这些参数,请将它们从接口中删除,因为初始化需要内存,并且在阅读代码时可能会给其他人造成一些混乱