如何使用C#WinForms在MVP中的视图之间导航?

时间:2009-04-02 01:19:32

标签: c# winforms design-patterns mvp

据我所知,当我们使用MVP时,我们将所有表示逻辑移动到Presenter。但我们不想让Presenter了解视图实现,那么我们如何导航到应用程序中的另一个屏幕呢?您如何管理实际应用程序的应用程序流程?

4 个答案:

答案 0 :(得分:4)

使用一些导航器界面,例如:

interface INavigator
{
    void MoveTo (string screenName);
    void MoveTo (string screenName, NavigationParameters parameters);
}

然后,每个演示者都会在构造函数中传递此导航器的实例。这样,导航就会与演示者和各个视图分离。

您可以在配置中定义屏幕名称和实际Form类别之间的映射。

答案 1 :(得分:1)

这是视图上的方法。因此,您将拥有一个抽象方法,例如ShowCustomerForm(),WinForms的实现将是CustomerForm.Show(或WinForms中的任何内容),而WebForms中的实现则是Response.Redirict(CustomerForm.aspx)。 / p>

答案 2 :(得分:1)

我认为你的意思是另一个拥有自己的MVP对的屏幕?

今天早上我正在考虑这个案例,我的解决方案可能是有一个协调员知道需要打开的Presenter和MVP对。那个打开新的演示者+视图,完成后,可选择在第一个演示者上调用一个带有结果的方法。

通过这种方式,第一个MVP不必知道有关新屏幕的任何信息,它们只会触发一个事件。打开第二个窗口并进行通信的逻辑完全包含在协调器中。

答案 3 :(得分:0)

我们使用Lennaert调用协调器(我们称之为工作流控制器)来实现此目的。我来自Java Web开发,这个想法是ApplicactionController的一种形式。我遇到了一些问题,workflowcontroller运行一个命令。每个命令代表一个工作流程或一系列相关步骤(因此名称workflowcontroller)。流控制器处理命令之间的导航,并且流控制器具有在步骤之间导航的导航器。每个步骤都有一个完成事件(演示者连接到的)和NextStep方法,我们用它来导航到下一步。我们的worflowcontroller与菜单紧密耦合,因此我们可以在不同的工作流程之间导航这些步骤建立了视图和演示者之间的链接。我们没有任何配置,并且已经硬连接了建立下一步执行到名为NextStep的方法的逻辑。它正在制作中,但我对此并不十分满意。进入这里的细节太多了。  我已经考虑过更多事件驱动的东西。我们使用消息总线来完成所有其他通信,我想转而使用它来在屏幕之间导航。我不知道这是否有帮助。我们的屏幕大部分都是顺序工作流程。