1

我正在从事的项目是一个基于移动 .NET CF 的应用程序。我必须在其中实现 MVP 模式。我现在在其中使用 OpenNETCF.IoC 库和服务。

我必须将 Windows 窗体代码重构为 SmartParts。

我在实现导航场景时遇到问题:

// Show Main menu    
bodyWorkspace.Show(mainMenuView);

// Show First view based on user choice    
bodyWorkspace.Show(firstView);

// In first view are some value(s) entered and these values should be passed to the second view    
bodyWorkspace.Show(secondView); // How?

在 Windows 窗体逻辑中,这是通过变量实现的:

var secondForm = new SecondForm();
secondForm.MyFormParameter = myFormParameter;

如何用 MVP 术语重新实现这个逻辑?

4

1 回答 1

1

这在很大程度上取决于您的架构,但这是我的建议:

首先,ViewB 不需要 ViewA 中信息。它需要模型或演示者中的信息。ViewA 和 ViewB 应该从同一个地方获取他们的信息。

例如,这可以通过服务来完成。这可能看起来像这样:

class ParameterService
{
    public int MyParameter { get; set; }
}

class ViewA
{
    void Foo()
    {
        // could also be done via injection - this is just a simple example
        var svc = RootWorkItem.Services.Get<ParameterService>();
        svc.MyParameter = 42;
    }
}

class ViewB
{
    void Bar()
    {
        // could also be done via injection - this is just a simple example
        var svc = RootWorkItem.Services.Get<ParameterService>();
        theParameter = svc.MyParameter;
    }
}

您正在使用的 IoC 框架中也支持的事件聚合也可以工作,其中 ViewA 发布 ViewB 订阅的事件。可以在此处找到一个示例,但一般来说,您将使用EventPublicationandEventSubscription属性(前者用于 ViewA 中的事件,后者用于 ViewB 中的方法)。

于 2013-09-23T13:52:25.227 回答