c# - 在 C# 中显示来自 Presenter 的表单

标签 c# .net winforms mvp

我有更多的架构问题。我正尝试在 C# 中实现 MVP,如下所示:

  • IView 创建 Presenter
  • IPresenter 有一个 IView 属性,它持有 View,绑定(bind)到它
  • View 可以是Form,但是Presenter 不区分Form 和非Form 类型,所以View 可以互换,解决方案是可测试的

我有时需要做的是打开其他表格。例如,我有带有 DataGrid 的浏览器 View ,当我双击一个网格项或选择某项并单击“编辑”按钮时,会引发“编辑”事件并且演示器会起作用。

现在,Presenter 需要打开一个 Editor View ,它也是一个 Form,但是问题是,presenter 不应该自己构造 Form,因为那样就不可能 Mock View。

我对正确的概念很纠结。我的代码看起来像这样:

var editorView = new EditorForm();
editorView.Presenter.Entity = SelectedEntity;
editorView.ShowDialog(View as Form);

在幕后,EditorForm 构造函数构造演示器并将 this( View 实例)分配给演示器:

public EditorForm()
{
    Presenter = new EditorPresenter(this);
    InitializeComponents();
}

从 View 的角度来看,我可以简单地通过实现 Mock 然后从 MockView 的构造函数实例化相同的 Presenter 来将它交换到 MockView。

我在这里和网上搜索了一些其他的问答,但没有找到合适的。

感谢您的所有提示。

最佳答案

如果我理解你的概念, 我建议您像处理主视图一样根据 MVP 模式来投影编辑演示文稿问题。 因此,创建 IEditView 和 EditPresenter,最后在主演示器中创建 EditPresenter 的实例。通常通过其演示者控制编辑 View 。

关于c# - 在 C# 中显示来自 Presenter 的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16266030/

相关文章:

c# - 你能用隐式转换满足通用约束吗?

c# - 有没有办法在Windows 8中模拟触摸事件

c# - asp.net 4.0 中的解码 - 特殊字符

c# - 将子事件提升到父 UserControl 的最 DRY 方式

c# - 如何沿轴旋转字符串列表?

c# - 文档数据库请求连续 token 在第一次迭代时未设置

c# - 没有从 'ApplicationDbContext' 到 'System.Data.Linq.DataContext' 的隐式引用转换

c# - XML/XHTML 替换内容?

.net - 从 .net 4.6.2 库中引用 .NET Standard 1.6 库

c# - 从 Winform 显示 HTML 文件