如何以及是否构建复合视图?

Urb*_*Esc 6 c# wpf mvvm

我的申请并不复杂.它从Web服务中检索单个实体,对其进行编辑并将其发回.实体本身相当大,有一些协会和几十个属性.把它想象成一个大文件(它实际上一个文件).

我想过使用多个嵌套视图构建我的应用程序.所以我有一个完整实体的视图和视图模型,但它包含多个视图和各种属性的视图模型.这是一个好方法吗?或者我将来会遇到很多问题?

另外:我如何连接它们?我是否绑定嵌套视图的DataContext的以"实体"("真正的"从域对象)或通过这样来讲话"父"视图模型创建的ViewModels?

我应该使用MVVM Light,Prism还是Caliburn.Micro等MVVM框架?

Met*_*urf 2

无论您有一个文档实体视图还是多个文档实体子视图,它们最终都应该共享同一个文档实体。如果这只是一个小型应用程序,那么代表文档实体的单个视图可能是一个不错的方法。

然而,也可以将实体分解为其组成部分。这将使您能够为每个零件创建更易于管理的模型。在这种情况下,您将需要使用发布/订阅模型在实体更新时传递实体,以便在任何其他组件修改该实体时,每个组件部分都会使用最新的实体进行更新。

如果您决定使用子视图,那么 MVVM 框架将使管理变得更容易。也就是说,即使您选择一个大视图,MVVM 框架仍然会为您处理许多基本管道。

我已经使用了您提到的所有三个 MVVM 框架,并建议使用 Caliburn.Micro 或 MVVM Light。Prism 可能有点让人不知所措,并且学习曲线要​​陡峭得多。

编辑

根据您的附加信息并假设:

  • 您的文档实体由多个复杂的属性组成。
  • 这些复杂属性中的每个(大多数)都代表可以根据自己的优点进行编辑的信息子集,即文档元数据、文档作者信息等......

然后你可以按照以下方式做一些事情:

  • 为代表文档实体子集的每个复杂属性创建用户控件。每个用户控件都可以拥有自己的 ViewModel,其中包含如何编辑数据的逻辑。
  • 创建一个基本视图(Shell)和布局,其中每个用户控件将被注入;使用 aContentControl作为 Shell 中每个用户控件的容器。Shell 的 ViewModel 将负责将各种用户控件注入到每个 ContentControl 中。
  • 创建一个控制器,它将为文档实体完成艰苦的工作,即获取新的、更新等......
  • 当任何用户控件修改数据时,将其发送回控制器,控制器将更新文档实体,然后将新实体广播给每个人;这是您将使用发布/订阅模型的地方。

使用 Caliburn.Micro 还是 MVVM Light 并不重要;它们都为基本管道奠定了良好的基础。选择您感觉最舒服的方式。