Composite UI Application Block(CAB)

序言

WorkSpace

WorkSpace:作为一个容器,它可以统一的添加和显示视图。CAB中提供了一组控件作为视图的容器,包括DeckWorkSpace,MDIWorkSpace,TabWorkSpace,WindowWorkSpace,ZoneWorkSpace。 它们的作用有点类似普通Windows 控件Panel,MDI窗口,TAB控件,Window窗体。在程序中根据名称可以通过WorkItem的WorkSpace集合索引到它们。

Workspace是SmartPart的容器与管理器。它可以控制SmartPart如何显示或者隐藏,以及如何布局。

WorkSpace 分为5种,用于动态加载各种继承于controller的用户自定义控件,也即smartPart。

1.WindowWorkSpace

该WorkSpace能将你需要在其中显示的用户控件在一个WinForm中显示出来,我们可以通过和该WorkSpace对应的WindowSmartPartInfo来设置用户控件的显示属性,如标题信息,是否是模式窗口等。

2.MDIWorkSpace

该WorkSpace是在WindowWorkSpace的基础上发展而来的,他同样将一个用户控件在单独的Form中进行显示,并且,他还将以MDI的形式显示和管理其子窗体。对应用户控件的显示信息的设置是通过设置smartPartInfo,然后作为参数传入WorkSpace的Show方法。

3.TabWorkSpace

该WorkSpace能将你需要在其中显示的用户控件以Tab页的形式显示出来,我们可以通过和该WorkSpace对应的TabSmartPartInfo来设置用户控件的显示属性,如标题信息。

4.DeckWorkSpace

该WorkSpace将以类似于重叠的卡片的形式来显示用户控件,当前激活的界面将在卡片的最上方。卡片的数序是由Workspace进行管理。没有和该WorkSpace对应的SmartPartinfo.

5.ZoneWorkSpace

该WorkSpace将以平铺的方式显示用户控件,比如类似OutLook的界面,可以将一个界面划分成多个Zone,每个Zone都是作为呈现用户控件的一个容器。同样的,我们可以通过设置ZoneSmartPartInfo来设置用户控件在WorkSpace中的显示属性。

SmartParts 

也可以被称作View,实际上是一个个自定义的控件。

WorkItems 

代表一个用例,包含在 Workspace 之中

State

你可以把它想象成Asp.net中的Session一样,可以把一些在本WorkItem中传递的信息存到State中。

Event 

Event Broker:事件代理,通过事件源和订阅事件源来达成对象之间的协作。

Event Publisher:事件发布者,在CAB里是一个用属性EventPublication修饰的事件对象,提供特定的URL给Event Subscriber订阅。

Event Subscriber:事件订阅者,在CAB里是一个用属性EventSubscription修饰的方法,根据修饰提供的URL自动寻找事件发布者。Publisher和Subscriber之间由主题(由URL决定),

[EventPublication("topic://TestReport/DataRowAdded")]
public event EventHandler<DictionaryEventArgs> DataRowAdded;

FormShellApplication

现在我们来看看基于CAB的应用程序中非常重要的一个类。这个类可以认为是一个CAB应用的启动点。

class Program : FormShellApplication<MainWorkItem, MainShellForm>

Controller

controller中主要来实现业务逻辑,于是我们需要添加一个方法AddNewRow(int sex, string name),用来实现人员信息的添加

整合界面和controller,[CreateNew],将该窗体相关的Controller标记为自动创建实例

资料

https://www.cnblogs.com/lglruirui/archive/2010/06/21/1761737.html?tdsourcetag=s_pcqq_aiomsg

https://www.cnblogs.com/mixiaobo/archive/2008/01/16/1041349.html

https://www.cnblogs.com/wf20012/archive/2007/04/18/718610.html

https://www.cnblogs.com/lglruirui/archive/2010/07/07/1772912.html

原文地址:https://www.cnblogs.com/cnki/p/11515383.html