我有更多的架构问题。我正尝试在 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/