【问题标题】:WPF, MVVM and Prism modularityWPF、MVVM 和 Prism 模块化
【发布时间】:2011-04-16 00:27:14
【问题描述】:

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

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

  • 假设我的视图有许多用户 控件和每个用户控件需要 绑定到来自不同对象的数据。我的视图模型是否只是一个巨大的类,其中包含视图的所有不同组件所需的所有数据?

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

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

【问题讨论】:

    标签: wpf mvvm prism


    【解决方案1】:

    我将尝试分别检查这些项目。

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

    如果您刚开始使用 Prism 并有任何其他问题,您可能会发现 codeplex forum 很有用,因为您的问题可能已由 Prism SE 团队回答。

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

    谢谢, 达米安

    【讨论】:

    • 谢谢达米安。真的很有帮助。
    猜你喜欢
    • 2018-10-01
    • 2012-07-29
    • 2012-07-17
    • 2014-01-18
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多