gpt4 book ai didi

WPF、MVVM 和 Prism 模块化

转载 作者:行者123 更新时间:2023-12-03 10:15:29 29 4
gpt4 key购买 nike

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

  • 我认为我有一个网格。可以说我
    有一个按钮,当我点击时
    希望它自动调整网格大小
    列。那个代码会去哪里?
    调整网格列的大小是一个 View
    并且 View 模型不应该知道
    关于它。所以在这种情况下我会
    在中添加按钮单击处理程序
    View 的代码在后面?我有
    与网格编辑相同的问题和
    验证。 View 模型可以看到
    当使用双向编辑值时
    具有约束力,但如果它决定
    值无效,如何通知
    网格取消编辑?
  • 可以说我的 View 有很多用户
    控件和每个用户控件需要
    绑定(bind)到来自不同对象的数据。我的 View 模型是否只是一个巨大的类,其中包含 View 的所有不同组件所需的所有数据?
  • 关于 Prism 和模块化设计,我
    我想弄清楚什么是
    “模块”是。我的理解是
    一个模块是自包含的,
    意思是如果我拿起我的模块并且
    把它放在另一个应用程序中,它应该
    工作。所以如果我有课
    进行一些服务调用(让
    说对服务器的 SOAP 调用得到一些
    info) 并填充一个网格,我的模块
    需要同时包含 MVVM
    组件和我的服务层,
    对?如果我有多个模块
    使用相同的服务层,确实
    每个都需要包含服务层类的副本
    为了被认为是一个完整的
    模块?

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

    最佳答案

    我将尝试分别讨论这些项目。

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

  • 如果您刚开始使用 Prism 并有任何其他问题,您可能会找到 codeplex forum有用,因为 Prism SE 团队可能已经回答了您的问题。

    我希望这个答案有帮助。

    谢谢,
    达米安

    关于WPF、MVVM 和 Prism 模块化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774358/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com