这里是 MVC 模式是什么以及我如何将它应用到 WPF 应用程序的“简要”描述。
(由于我主要在 Silverlight 中进行黑客攻击,因此我可能有一些细节略有偏差,但概念非常相似。)
基本上,这个想法是分离关注点并定义应用程序不同部分之间的接口,目标是保持代码的结构化和可维护性。
您示例中的 Model 与您描述的轮辋几乎完全相同 - 一个 WheelRim 类,具有在合适的数据类型中定义的各种属性。我会将模型放在一个单独的程序集中,以使其与其他代码分开,但您可以满足于将模型类保存在“模型”文件夹中。该模型在数据库中也会有一个“双胞胎”,模型类几乎是一对一映射到表的。
(您可能想看看 Linq2SQL 或实体框架,如果定义了数据库,您几乎可以免费获得模型以及合适的数据库访问代码。)
View 将是实际的 WPF xaml 文件 - 定义 Grid 或 Canvas 或你有什么。在 WheelRimView 上会有用于显示或访问不同属性的标签和文本框,可能还有产品图像等。视图背后的代码将包含所有相关的事件处理程序(start、button_click 等),用于从字段中获取数据并将它们传递给控制器。
控制器 可以是您用来操作数据的任何“处理程序代码”。我们在这里讨论的是基本的 CRUD 操作,以及验证等。此外,控制器层将负责以可以无缝进入视图的格式编译数据。 WheelRimController 因此会有“GetWheelRimList”、“GetWheelRim”、“AddWheelRim”、“ModifyWheelRim”和“DeleteWheelRim”等方法。这些方法将值作为参数并相应地操作模型对象。
我建议保持 xaml 文件的代码隐藏不受任何“控制器”-ish 代码(如验证、聚合等)的影响 - 后面的代码基本上应该只从文本框、列表框等中获取值并发送它们按“原样”向控制器方法进行处理。此外,在获取用于演示的数据时,您应该将任何数据格式化代码保持在最低限度(即视图中不进行过滤或翻译)。
“用户打开轮辋并编辑直径”的典型用例将在代码中出现:
- 用户单击列表页面上的“编辑”。 WheelRimView 页面加载。
- WheelRimView.Load() 方法(或相应的)调用 WheelRimController.GetWheelRim(wheelRimId)。
- WheelRimController.GetWheelRim(wheelRimId) 从数据库表中获取相应数据并填充 WheelRim 对象的属性,该对象返回到 WheelRimView。
- WheelRimView 将属性值插入标签和文本框。
- 用户更改直径值并单击“保存”按钮。
- WheelRimView.Save() 方法调用 WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 方法。
- WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 方法解析直径(如果是字符串)并加载模型对象。它将修改后的值应用于模型对象并将其保存到数据库中。
- WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 向 WheelRimView 返回一个状态代码(例如一个预定义的数字,说明任何验证错误)以报告保存成功。
- WheelRimView 向用户显示结果消息(跳跃式“已保存”)。
我希望这能解决一些问题。