程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Composite UI Application Block 之自定義CommandAdapter

Composite UI Application Block 之自定義CommandAdapter

編輯:.NET實例教程

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));

           }


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved