WPF,MVVM和Prism模块化

时间:2010-09-22 23:24:43

标签: wpf mvvm prism

我仍在学习使用MVVM和Prism,并有一些一般性问题:

  • 我的视图中有一个网格。让我们说 有一个按钮,当我点击我 希望它自动调整网格大小 列。那个代码会去哪里? 调整网格列的大小是一个视图 并且视图模型不应该知道 关于它。所以在这种情况下,我会 添加按钮单击处理程序 视图的代码背后?我有 与网格编辑相同的问题 验证。视图模型可以看到 使用双向编辑值时 绑定,但如果它决定了 值无效,如何通知 网格取消编辑?

  • 让我们说我的观点有很多用户 控件和每个用户控件的需求 绑定到来自不同对象的数据。我的视图模型是否只是一个庞大的类,包含视图中所有不同组件所需的所有数据?

  • 关于棱镜和模块化设计,我 我想弄清楚什么是 “模块”是。我的理解是 模块是自包含的, 这意味着如果我拿起我的模块和 它应该放在另一个应用程序中 工作。所以如果我有课 做一些服务电话(让我们 说对服务器的SOAP调用得到一些 信息)并填充网格,我的模块 需要包括MVVM 组件和我的服务层, 对?如果我有多个模块 是否使用相同的服务层 每个人都需要包含服务层类的副本 为了被认为是完整的 模块

感谢您提供任何建议/信息。

1 个答案:

答案 0 :(得分:3)

我会尝试单独检查这些项目。

  1. 正如你所说,调整网格列的大小更像是一个视图,所以保持它作为UI逻辑的一部分可能是最好的。为了使代码尽可能保持干净,您可以使用behaviors之类的不同内容,在某些情况下使用路由命令来避免代码隐藏在代码中。至于验证逻辑,您应该将其放在VM / M中并使用WPF的验证功能(例如IDataErrorInfo和其他)。
  2. 您可以为所有用户控件设置单个视图模型,也可以采用层次结构视图模型方法。 latest Prism drop在MVVM RI中显示了这种情况。
  3. 您对模块的理解是准确的。需要考虑的一件事是,如果您有整个应用程序的公共服务,通常的方法是将其接口放在基础结构项目中并在必要时引用它(具体实现通常通过DI或Mef导入获得)。具体实现所属的模块可以根据需要选择在容器中注册服务/公开导出。 This thread提供了有关模块的更多信息,它们是什么以及如何使用它们。
  4. 如果您开始使用Prism并有任何其他问题,您可能会发现codeplex forum很有用,因为Prism SE团队可能已经回答了您的问题。

    我希望这个答案有所帮助。

    谢谢, 达米安