| 本文将介绍以下内容: 复合应用程序基础知识 引导程序和模块初始化 区域和 RegionManager 视图、命令和事件 | 本文使用了以下技术: WPF 复合应用程序指南 |
图 1 单一应用程序中的用户控件然后,使用 RoutedEvents、RoutedCommands 和数据绑定将所有内容连接起来。有关此主题的详细信息,请参阅 Brian Noyes 在本期撰写的文章“了解 WPF 中的路由事件和命令” (msdn.microsoft.com/magazine/cc785480)。PositionGrid 有一个相关联的 RoutedCommand 可供选择。在命令的 Execute 处理程序中,只要选择了某个位置就会发生 TickerSymbolSelected 事件。TrendLine 和 NewsReader 被连接在一起,以侦听 TickerSymbolSelected 事件并根据所选的股票代号呈现相应的内容。在这种情况下,应用程序与每个控件都紧密耦合在一起。UI 中存在大量用于协调各个部分的逻辑。控件之间还存在着相互依赖关系。由于存在这些依赖关系,因此无法通过某种简单的方法将应用程序分解成可在其中分别开发各个不同部分的窗体。虽然可以将所有用户控件都放在一个单独的程序集中以提高可维护性,但这种做法只是将问题从主应用程序转移到了控件程序集,治标不治本。在这种模型中,进行重大更改或引入新功能都非常困难。现在,让我们增加两个新业务需求以使问题变得更复杂一些。第一个需求是添加一个基金债券屏幕,当双击某个基金时它会显示有关所选基金的个人债券。第二个需求是添加一个新屏幕,显示与所选基金相关的超链接列表。由于时间有限,这些功能必须由不同的团队并行开发。每个团队都开发单独的控件:FundNotes 和 FundLinks。要将这两个控件添加到相同的控件程序集,必须将它们添加到控件项目中。更重要的是,必须将其添加到主窗体中,这意味着每个控件中对代码和 XAML 的更改都必须合并到主窗体中。此类操作可能会非常脆弱,尤其是对已有的应用程序。如何将所有更改都应用到主应用程序中?要完成此任务,您可能需要花费大量的时间在源控件中执行合并和拆分操作。如果在应用变更时出错或意外覆盖了某些内容,应用程序就会遭到破坏。补救方法是重新考虑应用程序设计。