【问题标题】:Communicate between views在视图之间进行通信
【发布时间】:2012-04-25 17:15:31
【问题描述】:

我很难理解这种模式。 在工作中,我们正在使用被动视图来实现 MVP。我们正在使用 WinForms。

  • 所以我们有一个 View(它是一个 windows 窗体),它实现了一个界面并有一个演示者。
  • 演示者获取视图的接口实例 实现并管理视图抛出接口。
  • 演示者可以看到模型和经理。
  • 管理器处理多个模型的数据库持久性,但它不手动添加它们,它使用一个单独的层,称为数据,因此它告诉该层持久化数据
  • 然后数据层使用实体框架将数据持久化到数据库中

假设我们有一个客户端视图,它代表一个模型客户端,并且我们的数据库中有一个名为客户端的表。 客户可以有姓名和城市。

我们还有一个 Cities 视图,它是一个简单的添加、编辑和删除,它还​​代表一个模型 City,以及一个表 City。

现在在我们的客户视图中,我们想让用户添加一个新城市,所以在视图中,我们打开另一个视图,城市视图,然后用户创建一个新城市。

从客户视图,我想看看用户添加了哪个城市,这怎么可能?视图会返回一些东西吗?

(我想在内存中,添加城市时不要将任何东西保存到数据库中,我只想要城市的模型)

我认为返回模型并从视图中查看模型不是 MVP。那我该怎么办呢?

【问题讨论】:

  • 我假设您的 ViewModel 会在数据更改时触发适当的事件来更新 UI?
  • ViewModel 是什么意思?
  • 听起来你的界面就是 ViewModel。当您在界面上设置某些内容时,UI 会更新,是吗?
  • 是的,确实如此。那么 Cities 视图应该可以访问 Clients 界面吗?
  • 听起来表单应该简单地将接口元素作为属性公开,然后您的其他表单可以简单地与该接口对话以设置项目。

标签: c# .net winforms mvp


【解决方案1】:

一个视图打开另一个视图是完全合理的,但我个人不赞成视图返回一个供调用者使用的值。如果其他视图需要访问这个新城市怎么办?

在此处查看我的答案:MVP Communication between presenters?,了解使用 pub/sub 实现目标的示例。

【讨论】:

    猜你喜欢
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    • 2011-01-14
    • 2011-10-12
    相关资源
    最近更新 更多