如何在winforms mvp模式中实现用户控制

本文关键字:实现 用户 控制 模式 mvp winforms | 更新日期: 2023-09-27 18:10:10

我想实现MVP模式。我有一个用户控件,它有一些文本框,当我把它放在表单中时,我调用usercontrol的一个方法,然后填充文本框。但是在mvp模式中,我不知道如何访问usercontrol1.fill()。你能举个例子帮助我吗?

如何在winforms mvp模式中实现用户控制

下面是该模式的一个示例实现。呈现者只知道接口有show方法。演示者调用它,但只有表单(也称为视图)实现了表单应该如何显示。

public interface IMyFormView {
    void Show();
}
public class MyForm : IMyFormView {
    public MyForm() {
        var presenter = new MyFormPresenter(this);
        presenter.Init();
    }
    public void Show() {
        usercontrol1.fill();
    }
}
public class MyFormPresenter
{
    private IMyView _view;
    public MyFormPresenter(IMyView view) {
        _view = view;
    }
    public void Init() {
        _view.Show();
    }
}

如果您需要将数据传递到视图中,那么您可以通过Show -方法传递视图模型或在视图上设置自定义属性。

如果您的用户控件被放置到一个表单中,并且假设该表单是您项目中的一个视图,那么这个视图负责访问用户控件。您不应该直接从演示器访问用户控件的任何方法。实际上,呈现者不应该知道这些方法的存在,甚至不应该知道用户控件的存在。呈现者只知道为该视图实现现有接口的视图的存在。因此,你的视图(表单)将知道并调用这个usercontrol的方法。为了传递显示器的值来填充表单中的用户控件,视图实现的接口应该使用set方法公开一个公共属性(如果还打算读取这些值,还应该使用get方法)。当你的视图实现这个接口时,在这个属性的set方法的实现中,你可以调用用户控件的任何方法,因为用户控件包含在你的表单中,你的表单知道用户控件和它的方法的存在。从那里访问应该没有任何问题。

同样,如果你需要从用户控件中读取值,这应该在视图中完成,在get实现这个属性。演示者只是使用接口中定义的get方法读取属性,视图将知道如何访问值并返回它们。