2011-09-30 57 views
3

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

+0

@ veronika.op:如果您有其他问题,请不要编辑此条目,而要创建一个新条目。我回滚了最新的变化。 –

回答

1

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

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

2

这是模式的示例实现。演示者只知道具有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 - 方法或设置自定义属性通过视图模型。

+0

谢谢,但我不明白我怎么可以访问我的usercontrol.i的方法不要问题发送parameter.my问题是我怎么能写myu​​sercontrol.fill()(填充是我的方法名称)? –

+0

我改变了相应的代码。现在,演示者调用'_view.Show()',然后填充您的控件。 –