c# - MVP 调用表单

标签 c# winforms mvp

我尝试在 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/

相关文章:

c# - 使用 "&lt;input type="文件"..../>"代替 asp :FileUpload

c# - 为什么按钮处理点击的方式与非按钮不同

gwt - 使用 MVP Arch 在 GWT 中创建动态 View

design-patterns - 演示模型与被动 View

c# - MVP中Presenter的实现问题

c# - Visual C# 中的 "Global variable"

c# - 调度任务c#

winforms - 获取 System.Windows.Forms.RichTextBox 的标准上下文菜单

c# - 标签尺寸不正确

c# - 如何将 await/async 与同步代码一起使用?