如何在winforms mvp模式中实现usercontrol?

ver*_*.np 5 c# mvp winforms

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

Den*_*aub 5

这是该模式的示例实现。Presenter 只知道具有 show 方法的接口。Presenter 调用它,但唯一的表单(又名视图)实现了表单的显示方式。

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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


Ale*_*tin 2

如果您的用户控件放置在表单中,并假设该表单是您项目中的一个视图,那么正是该视图负责访问用户控件。您不应直接从演示者访问用户控件的任何方法。事实上,演示者不应该知道这些方法甚至用户控件的存在。演示者只知道实现该视图现有接口的视图的存在。因此,您的视图(表单)将知道并调用该用户控件的方法。要从演示者传递值来填充表单中放置的用户控件,视图实现的接口应使用该方法公开公共属性setget如果您还计划读取这些值,则还应公开一个方法)。由于您的视图正在实现此接口,因此在实现set此属性的方法时,您可以调用用户控件的任何方法,因为用户控件包含在您的表单中,并且您的表单知道用户控件的存在并且它的方法。从那里访问它应该不会有任何问题。

同样,如果您需要从用户控件读取值,则应在视图中实现get此属性来完成此操作。演示者只需使用接口中定义的方法读取属性get,视图就会知道如何访问这些值并返回它们。