MVP致电表格

时间:2013-12-04 22:26:52

标签: c# winforms mvp

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

代码

        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();
            }
        }

    }

谢谢!

1 个答案:

答案 0 :(得分:8)

在MVP View中'拥有'Presenter,而不是相反。 Presenter是关于演示文稿 logic ,而不是关于哪个视图以及应该如何打开。

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

以这种方式查看:Presenter通常只有View接口的引用,因此您可能有一个控制台视图和一个winform视图。因此,Presenter不负责了解哪种类型的视图当前处于“在线状态”以及如何启动它。

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

这里的重要部分是,Presenter不会在对话框等方面“思考”,它会在业务逻辑方面“思考”(需要确认操作等)。

希望它有所帮助。