2010-09-22 169 views
2

我仍然在学习使用MVVM和棱镜,并有一些普遍问题:WPF,MVVM和棱镜模块化

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

  • 比方说我认为有许多用户 控制并且每个用户控制需要 从一个不同的对象绑定到的数据。我的这个视图的视图模型是否仅仅是一个庞大的类,其中包含了视图中所有不同组件所需的所有数据?

  • 关于棱镜和模块化设计,我 正试图找出什么 “模块”是。我的理解是 ,一个模块是自包含的, 意思是如果我拿起我的模块,并且 放在另一个应用程序中,它应该 工作。所以,如果我有一个类 ,使得一些服务电话(让 说SOAP调用服务器得到一些 信息),并填充一个网格,我的模块 需要既包括MVVM 组件和我的服务层, 权?如果我有多个使用相同服务层的模块 ,那么每个模块是否需要包含服务层类 的副本以便被视为完整的 模块?

感谢您的任何建议/信息。

回答

3

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

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

如果您开始接触棱镜并有任何其他问题,您可能会发现codeplex forum有用,因为或许您的问题已由Prism SE团队回答。

我希望这个答案有帮助。

谢谢, 达米安

+0

谢谢达米安。真的很有帮助。 – Flack 2010-09-23 17:32:19