gpt4 book ai didi

c# - MVP 调用表单

转载 作者:行者123 更新时间:2023-11-30 19:41:17 25 4
gpt4 key购买 nike

我尝试在 WinForms 应用程序中实现 ModelViewPresenter(MVP) 模式。我有一个带有按钮的主窗体,当我单击此按钮时,会显示一个新窗体。遵循 MVP 模式的最佳方法是什么?我想,我应该从我的演示者那里打开第二个表单,这样该 View 就不知道其他 View 的任何信息。但我不确定。我的应用程序只有三个对话框。什么是最好的方法?

代码

        private void LoadAndShowMasterTrackForm()
{
if (GvClaims.SelectedRowsCount < 1)
return;

// Create an empty list.
var rowsToUpdate = new List<TrackData>();
// Add the selected rows to the list.
for (int i = 0; i < GvClaims.SelectedRowsCount; i++)
{
if (GvClaims.GetSelectedRows()[i] >= 0)
{
var track = GvClaims.GetRow(GvClaims.GetSelectedRows()[i]) as TrackData;
if (track != null)
rowsToUpdate.Add(track);
}
}
using (var uow = new UnitOfWork())
{
try
{
GvClaims.BeginUpdate();
var frmSynonyms = new MasterTrackDialog { DataSourceMainGridView = rowsToUpdate, DataSource = rowsToUpdate, SessionUow = uow };
var result = frmSynonyms.ShowDialog(this);
if (result == DialogResult.Cancel)
uow.RollbackTransaction();
}
catch (Exception ex)
{
uow.RollbackTransaction();
Logger.Error(ex.Message, ex);
}
finally
{
GcClaims.RefreshDataSource();
GvClaims.EndUpdate();
}
}

}

谢谢!

最佳答案

在 MVP View 中“拥有”Presenter,而不是相反。Presenter 是关于演示的逻辑,而不是关于应该打开哪个 View 以及如何打开。

因此您不能(不应该)在演示者中实例化和打开 View 。

这样看:Presenter 通常只有对 View 界面的引用,因此您可能有一个控制台 View 和一个 winform View 。因此,Presenter 不负责了解哪种类型的 View 当前“在线”以及如何启动它。

Presenter 可以做的是命令 View 做某事。例如,它可以调用 view.ConfirmOperation(),现在取决于 View 如何在 UI 中执行此操作。控制台 View 可能会在命令行中提示,而 winforms View 可能会打开一个对话框。

这里重要的是 Presenter 不是根据对话框等“思考”,而是根据业务逻辑(需要确认操作等)来“思考”。

希望对您有所帮助。

关于c# - MVP 调用表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20387414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com