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

时间:2011-09-30 06:57:46

标签: c# winforms mvp

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

2 个答案:

答案 0 :(得分:4)

以下是模式的示例实现。 Presenter只知道具有show方法的接口。 Presenter调用它,但唯一的形式(也称为View)实现了表单的显示方式。

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 - 方法传递视图模型,或在视图上设置自定义属性。

答案 1 :(得分:1)

如果您的用户控件放在表单中,并假设表单是项目中的视图,则此视图由谁负责访问用户控件。您不应直接从演示者访问用户控件的任何方法。事实上,演示者不应该知道这些方法的存在甚至用户控制。演示者只知道是否存在为该视图实现现有接口的视图。 因此,您的视图(表单)将知道并调用此usercontrol的方法。要从演示者传递值以填充表单中放置的用户控件,视图实现的界面应使用set方法公开属性(如果是,则使用get方法计划也阅读这些价值观)。 当您的视图正在实现此接口时,在此属性的set方法的实现中,您可以调用用户控件的任何方法,因为用户控件包含在您的表单中,并且您的表单知道存在用户控件及其方法。从那里访问它不应该有任何问题。

以同样的方式,如果您需要从用户控件中读取值,则应在视图中,在此属性的get实现上完成。演示者只使用界面中定义的get方法读取属性,视图将知道如何访问值并返回它们。