我想实现MVP模式。我有一个用户控件有一些文本框,当我把它放在窗体中时,我调用了一个来自usercontrol的方法并填充文本框。但在mvp模式中,我不知道如何访问usercontrol1.fill()
。你有一个可以帮助我的例子吗?如何在winforms mvp模式中实现usercontrol?
回答
如果您的用户控件放置在表单中,并且假设表单是项目中的视图,那么这个视图有责任访问用户控件。您不应直接从演示者访问任何用户控件的方法。事实上,演示者不应该知道这些方法的存在,甚至不需要用户控制。演示者只知道实现该视图的现有接口的视图的存在。 因此,您的视图(表单)将会知道并调用此用户控件的方法。要传递演示者的值以填充放置在表单中的用户控件,由视图实现的界面应该使用set
方法公开属性(如果您计划还要读取这些值,则使用get
方法)。 由于您的视图正在实现此界面,因此在执行此属性的set
方法时,您可以在那里调用用户控件的任何方法,因为用户控件包含在您的表单中,并且表单知道用户的存在控制及其方法。你不应该从那里访问它有任何问题。
以同样的方式,如果您需要从用户控件读取值,则应该在视图中执行此属性的get
实现。演示者只需使用界面中定义的get
方法读取属性,视图就会知道如何访问这些值并将其返回。
这是模式的示例实现。演示者只知道具有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
- 方法或设置自定义属性通过视图模型。
谢谢,但我不明白我怎么可以访问我的usercontrol.i的方法不要问题发送parameter.my问题是我怎么能写myusercontrol.fill()(填充是我的方法名称)? –
我改变了相应的代码。现在,演示者调用'_view.Show()',然后填充您的控件。 –
- 1. 在winforms中使用MVC MVP模式
- 2. winforms MVP设计模式
- 3. 如何使用MVP模式在Winforms中构建项目?
- 4. STP MVP设计模式的实现
- 5. 如何将UserControl附加到MVP模式中的表单上?
- 6. Moq与WinForms MVP模式 - 失败测试
- 7. 数据库查询在MVP模式中实现在哪里?
- 8. MVP中的WinForms
- 9. Android MVP实现
- 10. 如何在WinRT中实现UserControl
- 11. MVP Android实现
- 12. 如何在MVP模式中使用UiHandler
- 13. WPF UserControl的按钮:如何实现UserControl?
- 14. 使用winforms实现观察者模式
- 15. 当展现在winform MVP模式视图
- 16. 如何在winforms中实现groupbox的'wordwrap'?
- 17. 在UserControl中实现DataTemplate DependencyProperty
- 18. 在使用ObjectBuilder实现MVP模式时使用NullReferenceException
- 19. 如何在php中实现flyweight模式?
- 20. 如何在Tkinter中实现MVC模式
- 21. 如何在Kotlin中实现Memento模式
- 22. 如何处理MVP模式中的SharedPreferences?
- 23. mvp模式中的winforms之间的通信
- 24. 在WinForms中控制vs UserControl?
- 25. MVP如何实现简单的登录
- 26. 为WinForms MVP应用程序实现业务对象
- 27. 是有效的Mvp模式实现(与rxandroid和翻新)
- 28. 使用MVP模式
- 29. 使用MVP实现寻呼
- 30. 如何在Android搜索栏模式中实现搜索模式?
@ veronika.op:如果您有其他问题,请不要编辑此条目,而要创建一个新条目。我回滚了最新的变化。 –