65.9K
CodeProject 正在变化。 阅读更多。
Home

WPF:如果 Carlsberg 做了 MVVM 框架:第 6 部分(共 n 部分)

starIconstarIconstarIconstarIconstarIcon

5.00/5 (42投票s)

2009年8月12日

CPOL

7分钟阅读

viewsIcon

206597

大概会是 Cinch,一个用于 WPF 的 MVVM 框架。

目录

Cinch 文章系列链接

介绍

上次,我们开始研究使用 Cinch 进行单元测试。在本文中,我将探讨以下内容:

先决条件

演示应用程序使用了

  • VS2008 SP1
  • .NET 3.5 SP1
  • SQL Server(请参阅 MVVM.DataAccess 项目中的 README.txt 文件,了解演示应用程序数据库的设置要求)

特别鸣谢

我想唯一的方法就是开始,那么我们开始吧,好吗?但在我们开始之前,我只需要重复一下特别感谢部分,并增加一位:Paul Stovell,我上次忘了把他包括进来。

在开始之前,我想特别感谢以下各位,没有他们,本文及后续一系列文章将不可能实现。基本上,我研究了这些人的 Cinch 作品,看到了什么好,什么不好,然后创建了 Cinch。我希望 Cinch 能填补其他框架未涵盖的一些新领域。

  • Mark Smith(Julmar Technology),感谢他出色的 MVVM 辅助库,它极大地帮助了我。Mark,我知道我已经征得了你使用部分代码的许可,你非常慷慨地同意了,但我还是想再次感谢你那些很棒的想法,其中一些我确实从未想到过。我非常佩服你,伙计。
  • Josh Smith / Marlon Grech(作为一个整体)他们出色的中介者实现。你们俩太棒了,一直都很愉快。
  • Karl Shifflett / Jaime Rodriguez(微软的哥们)他们出色的 MVVM Lob 游览,我参加了,干得好,伙计们。
  • Bill Kempf,感谢他一直以来的表现,以及他是一位疯狂的程序员大师,他也拥有一个很棒的 MVVM 框架,名为 Onyx,我曾在一段时间前写过一篇关于它的 文章。Bill 总是能解答难题,谢谢 Bill。
  • Paul Stovell 他出色的 委派验证想法,Cinch 使用它来验证业务对象。
  • 所有 WPF Disciples 的成员,在我看来,是最好的在线社区。

谢谢你们,伙计/女孩,你们懂的。

演示应用程序

从某些方面来说,本文会有些奇怪,因为我已经涵盖了构建演示应用程序或任何其他基于 MVVM 的应用程序(当然,使用 Cinch 框架)所需了解的所有知识,所以我不会在本文中涵盖任何代码,我认为这些内容在之前的文章中已经讲得很清楚了。

本文将侧重于演示应用程序的外观及其构成;当然,在这样做的同时,我将解释 Cinch 的某些类/对象是如何以及为何被使用,以及为什么遵循某些设计理念,但如果你期望进行完整的代码演练,那么本文不适合,你应该参考之前的文章。

我希望到目前为止,你已经掌握了足够的 Cinch 知识,可以自己拆解演示应用程序并了解其运作方式。请记住,在本文之前的所有 Cinch 文章都能帮助你。

它的外观

到目前为止,我已经写了五篇关于 Cinch 的文章,信不信由你,其中竟然没有一张演示应用程序的截图,这很大程度上是因为我一直在解释框架以及如何进行测试,而本文讨论的是演示应用程序的外观和结构,所以话不多说,我们需要看一些截图。让我们来看看一些截图,好吗?

开始页面

添加/编辑客户(下图显示添加新模式)

添加/编辑客户(下图显示在编辑客户订单过程中)

搜索客户

它是如何制作的

演示应用程序背后的基本思想非常简单。以下功能点解释了它的工作原理:

  1. UI 将是一个带有标签的界面,最初会加载一个开始页面。
  2. UI 应支持从开始页面和菜单项创建新客户。在这两种情况下,都应打开一个新的选项卡,除非已经打开了一个“添加/编辑客户”选项卡,这是一个我为展示如何使用 Mediator 和 Workspaces 而人为设置的愚蠢限制。
  3. UI 应支持从开始页面和菜单项搜索客户。在这两种情况下,都应打开一个新的选项卡,除非已经打开了一个“搜索客户”选项卡,这是一个我为展示如何使用 Mediator 和 Workspaces 而人为设置的愚蠢限制。
  4. 应有可能从搜索结果中编辑现有客户,除非“添加/编辑客户”选项卡已打开。
  5. 应有可能从搜索结果中删除现有客户,除非所选客户已在“添加/编辑客户”选项卡中打开。
  6. 应有可能从“添加/编辑客户”选项卡添加新客户,并使用“添加/编辑客户”选项卡上的错误样式文本框查看任何错误。
  7. 应有可能从搜索结果中打开现有客户(并开始编辑客户),然后取消编辑,这不仅应取消对客户的编辑,还应关闭“添加/编辑客户”选项卡。
  8. 应有可能通过弹出窗口向现有客户添加订单,并使用“添加/编辑订单”弹出窗口上的错误样式文本框查看任何错误。
  9. 应有可能通过弹出窗口编辑现有客户的订单。
  10. 应有可能从客户订单列表中打开现有客户的订单(并开始编辑订单),然后取消编辑,这不仅应取消对订单的编辑,还应关闭“添加/编辑订单”弹出窗口。

所以这就是 UI 应该做的事情,猜猜怎么着,它确实做了所有这些。那么我们该如何涵盖这些内容呢?

嗯,我们之前已经全部讲过了,所以我认为最好的方法是列出上面的功能点,然后我将简单地指向你在之前的 Cinch 文章中讨论过的地方。

演示应用程序功能点

项目 1

这是通过使用 TabControl 实现的,其项目绑定到 ObservableCollection<ViewModelBase>,如之前 Cinch 文章的这一部分所述:CinchIII.aspx#CloseVM

项目 2

与项目 1 相同,但通过 Mediator 检查是否已打开“添加/编辑客户”选项卡,如之前 Cinch 文章的这一部分所述:CinchII.aspx#MediatorMessaging

项目 3

与项目 2 相同。

项目 4

与项目 2 相同,但客户对象的编辑是通过 IEditableObject 接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject

项目 5

与项目 2 相同。

项目 6

这是通过使用 IDataErrorInfo 接口完成的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#validationRules

项目 7

客户对象的编辑是通过 IEditableObject 接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject

项目 8

错误如项目 6 所述,通过 IDataErrorInfo 接口显示。弹出窗口的处理是通过 IUIVizualiserService 完成的,如之前 Cinch 文章的以下部分所述:CinchIII.aspx#PopServCinchIV.aspx#PopServCinchV.aspx#UIVisualizer

项目 9

客户订单对象的编辑是通过 IEditableObject 接口实现的,如之前 Cinch 文章的这一部分所述:CinchII.aspx#IEditableObject

项目 10

与项目 7 相同。

即将推出?

在后续文章中,我将大致如下展示:

  1. 一个用于快速开发 Cinch ViewModel/Model 的代码生成器,如果我有多余的时间,可能还会有更多。代码生成器将用 Cinch 编写,因此代码生成器也将作为使用 Cinch 在自己的项目中开发的第二个示例。

就是这样,希望你喜欢

这实际上是我现在想说的全部内容,但我希望通过本文,你可以看到 Cinch 是如何让演示应用程序的开发变得如此“轻松”(er well,“Cinch”)。

谢谢

一如既往,欢迎投票/评论。

© . All rights reserved.