这个问题听起来像你试图在没有模型部分的情况下使用 MVC。如果我误解了,编辑您的问题以包含实际用例(示例)可能有助于我们理解上下文。
但总的来说,没有什么应该真正持久/存储在您的控制器中。所以控制器中不应该有任何需要“更新”或“通知”的内容(即:没有数据)。相反,数据应该位于管理所有数据的单独“模型”层中。然后视图从模型层读取以获取该视图的任何数据。
如需快速复习,请查看MVC 上的 wikipedia 页面,该页面有一个很好的经典 MVC 流程图和关于组件交互的简单文章。
讨论示例
让我们试着设计一个例子来理解这个问题。
假设我的应用程序中有一个用户列表。此列表可能显示在:
- 主管理员列表视图
- 管理员编辑用户视图
- 用户的个人资料视图
- 也许更多?
这些视图中的每一个都将从您的模型层请求数据并在屏幕上显示一些内容。
现在假设对一个用户的配置文件进行了更改。这将通过一个控制器方法来完成,该方法执行任何必要的工作以将一些更改应用于模型。
我的理解是,您希望所有这些视图都更新以反映这种变化。这意味着视图需要从模型中重新加载数据。它不应该从控制器本身获取此数据,即使控制器触发此重新加载/刷新 - 或者更确切地说,控制器方法可能有助于从您的模型层进行查询。重要的是,您不会在整个应用程序的多个控制器中维护数据的多个副本。持久性集中在模型层。
在 winforms 的情况下,如果您的 UI 组件被构建为识别该接口并相应地刷新,模型层可能能够提供类似于提到的 INotifyPropertyChanged 接口的东西。但这是一种相当依赖平台的方法。
一种更加平台/上下文不可知的方法是已经提到的发布-订阅(发布-订阅)模式。在这种情况下,对模型进行更改的每个控制器方法也会发布其更改的通知。该数据的任何视图都可以通过从模型层刷新/重新加载视图数据来监听并响应此类通知。