ViewModels和UI

时间:2011-06-06 15:36:55

标签: c# .net wpf mvvm

从设计的角度来看,我有一个复杂的GUI,将GUI(Window)切割成ViewModelsUserControlsDataTemplates的建议粒度是多少。假设我有一个窗口显示DataGrid中的实体列表,然后是ComboBoxes中的一些过滤器,一些细节......

我应该创建多少ViewModels? ......以及DataTemplatesUserControls

非常感谢您提供良好的WPF / MVVM设计模式理念。

2 个答案:

答案 0 :(得分:3)

虽然你的问题不是很明确,但我会尽力回答。 ViewModels的数量......取决于您。

我个人的做法是将我的用户界面分成许多不同的自定义UserControls,每个控件只有一个ViewModel。它允许我拥有一个水晶般清晰的架构,其中包含许多智能控件,每个控件都设计用于一个任务。例如,对于我的经理应用程序,我有: - 一个UserControl旨在列出所有用户 - 另一个旨在创建或编辑用户的 - 还有一个旨在监控用户活动。

将您的应用程序分成不同的任务驱动UserControls将帮助您:

  • 一个更容易理解的架构,
  • 更紧凑的XAML,更易于增强
  • 有机会不要惹来太多Bindings到处飞行。

关于DataTemplates,我通常会将常规模板分成不同的ResourceDictionaries

无论如何,没有“正确的方式”也没有“错误的方式”,我认为只有“你的方式”。对我来说,我的代码越精细,它就越容易理解,假设组件不够小,无法使用。应为一个主要目标设计一个单独的组件。一旦你完成了这种分离,MVVM将为你提供很多帮助!

答案 1 :(得分:1)

您的问题有点通用,真正的答案可能取决于您的应用程序。 View-Model是一个视图模型,所以我希望你的每个视图都有一个。

我会从简单的(KISS)开始,并在您的情况下使用单个视图模型和视图,UI控件(DataGrid等...)直接放在您的视图中。

如果可以,从第一天开始使用DataTemplates,它们有助于保持顶级布局,与模型对象的更详细布局分开。

如果/当你到达需要在其他地方重新使用控件/布局/逻辑的点时,那么你可以开始将这个单一视图/视图模型分解为视图组合或子视图或UserControls。您应该通过以类似的方式分解视图模型来镜像此组合。