【问题标题】:StockTrader RI > Controllers, Presenters, WTF?StockTrader RI > 控制器、演示者、WTF?
【发布时间】:2010-03-01 10:03:08
【问题描述】:

我目前正在学习如何通过 Prism(复合 WPF)项目来高级使用 WPF。

我观看了许多视频和示例,演示应用程序 StockTraderRI 让我问这个问题:

以下各部分的具体作用是什么?

  • SomethingService:好的,这是管理数据的东西
  • SomethingView:好的,这就是显示的内容
  • SomethingPresentationModel:好的,这包含视图要绑定到的数据和命令(相当于 ViewModel)。
  • SomethingPresenter:我不太明白它的用法
  • SomethingController:太不懂了

我看到 Presenter 和 Controller 不是必需的,但我想了解它们为什么在这里。谁能告诉我他们的作用何时使用它们?

【问题讨论】:

  • 我同意,事情一团糟。

标签: wpf design-patterns prism


【解决方案1】:

当我第一次使用 Prism 时,我有 exactly the same problem

Controllers 基本上用于跨越整个模块的逻辑,而Presenters 用于特定于View 的逻辑。

例如,Presenter 将响应导致视图中的按钮被禁用的命令。 Controller 将响应导致 View(和 Presenter)被完全更改的命令,或者可能在模块外壳的不同区域中加载不同的 View/Presenter。

编辑:至于何时使用它们,如果您不需要上面提到的编排,您可以完全跳过Controller。最简单的应用程序只有一个:

  • Module:将视图/演示者注册到Region
  • Presenter:响应视图中的命令并修改ViewModel
  • ViewModel:实现INotifyPropertyChangedPresenterView 之间的适配器
  • View:绑定到ViewModel并显示UI

编辑: 至于Presenter vs ViewModel,你的大部分逻辑应该在你的Presenter中。将您的 ViewModel 视为容纳视图的逻辑,而 Presenter 则处理与视图交互的后果。

例如,用户单击您的View 中的“搜索”按钮。这会触发一个ICommand,由您的Presenter 处理。 Presenter 开始搜索并设置ViewModel.IsSearching 属性,该属性触发CanSearch 的PropertyChanged 通知。 CanSearch 是一个只读属性,它基于其他几个属性(例如IsSearchEnabled && !IsSearching)。 View 中的“搜索”按钮将其Enabled 属性绑定到CanSearch

【讨论】:

  • 哦,所以它只是将当前视图(Presenter)中发生的事情与模块(Controller)中发生的事情分开。我实际上在 ViewModel 中做所有的逻辑工作。这是错误的还是只是一个战略选择?
  • Prism 只是一个建议。话虽如此,我已经用一些 VM vs Presenter 信息更新了我的答案。
  • 太好了,现在一切都清楚了。我现在试试这个。谢谢你的时间:)
【解决方案2】:

我认为这里的Controller指的是Application Controller

【讨论】:

  • 如果只有一个模块,Prism 也是如此。
猜你喜欢
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多