当前位置: 代码迷 >> 综合 >> Composite UI Application Block 之自定义CommandAdapter
  详细解决方案

Composite UI Application Block 之自定义CommandAdapter

热度:86   发布时间:2024-01-18 06:45:36.0

1.1. Commands

1.1.1.    类关系图

2?6 主要类关系图

说明:

1.         Command定义了一个命令,如“FileExit”,它跟一系列的CommandAdapter相关,好比一个命令可以从多个地方下发(菜单或工具栏等等)。

2.         Command持有一个ICommandAdapterMapService接口,也正是这个接口,通过void Register(Type invokerType, Type adapterType)完成了后期的扩展,比如添加自定义的CommandAdapter

3.         在各个CommandAdapter中触发的事件最终都是调用Command中的事件处理程序,这样的设计很显然是为了保持命令的一致性,如果菜单和工具栏上同样的命令,操作却不一样,那就神奇了J,请看Command中的代码:

            public virtual void AddCommandAdapter(CommandAdapter adapter)

           {

                 adapter.ExecuteCommand += this.OnExecuteAction;

                 adapter.BindCommand(this);

                 adapters.Add(adapter);

           }

1.1.2.    接口定义

2?7 ICommandAdapterMapService

其中CommandAdapterMapServiceCAB提供的默认实现。

1.1.3.    接口协作

2?8接口协作

说明:

1.         Register时,是根据具体类型添加相应的CommandAdapter,比如

2?9 注册自定义的CommandAdapter

因此在调用AddInvoker时传入ClickableTreeNode类型实例时,将会调用到TVClickableNodeCommandAdapter进行事件的注册。

WindowsFormsApplication基础类中默认提供了两种Adapter

private void RegisterCommandAdapters()

           {

                 ICommandAdapterMapService mapService = RootWorkItem.Services.Get<ICommandAdapterMapService>();

                 mapService.Register(typeof(ToolStripItem), typeof(ToolStripItemCommandAdapter));

                 mapService.Register(typeof(Control), typeof(ControlCommandAdapter));

           }

  相关解决方案