使用 ModelItem 編輯內容
ModelItem 編輯內容是主機應用程式用來與設計工具通訊的物件。 EditingContext 公開兩個可使用的方法:Items 和 Services
Items 集合
Items 集合是用來存取在主機與設計工具之間共用的資料,或是提供給所有設計工具的資料。 這個集合具有下列功能 (經由 ContextItemManager 類別存取):
Services 集合
Services 集合是用來存取設計工具與主機互動所用的服務,或是所有設計工具使用的服務。 這個集合具有下列重要方法:
將活動指派給設計工具
若要指定活動所使用的設計工具,請使用 Designer 屬性。
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
建立服務
若要建立在設計工具與主機之間當做資訊管道的服務,您必須建立介面和實作。 Publish 方法會使用此介面來定義服務的成員,而且此實作包含服務的邏輯。 在下列程式碼範例中,系統會建立服務介面和實作。
public interface IMyService
{
IEnumerable<string> GetValues(string DisplayName);
}
public class MyServiceImpl : IMyService
{
public IEnumerable<string> GetValues(string DisplayName)
{
return new string[] {
DisplayName + " One",
DisplayName + " Two",
"Three " + DisplayName
} ;
}
}
發行服務
為了讓設計工具取用服務,主機必須先使用 Publish 方法來發行服務。
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
訂閱服務
設計工具會使用 Subscribe 方法中的 OnModelItemChanged 方法來取得服務的存取權。 下列程式碼片段示範如何訂閱服務。
protected override void OnModelItemChanged(object newItem)
{
if (!subscribed)
{
this.Context.Services.Subscribe<IMyService>(
servInstance =>
{
listBox1.ItemsSource = servInstance.GetValues(this.ModelItem.Properties["DisplayName"].ComputedValue.ToString());
}
);
subscribed = true;
}
}
使用 Items 集合共用資料
使用 Items 集合與使用 Services 集合很相似,不過 SetValue 會用來取代 Publish。 這個集合比較適合在設計工具與主機之間共用簡單的資料,而非複雜的功能。
EditingContext 主機項目和服務
.NET Framework 提供了許多透過編輯內容存取的內建項目和服務。
Items:
AssemblyContextControlItem:管理參考本機組件的清單,這些組件將會用於控制項的工作流程內部 (例如運算式編輯器)。
ReadOnlyState:指出設計工具是否處於唯讀狀態。
Selection:定義目前選取的物件集合。
WorkflowFileItem:提供目前編輯工作階段所依據之檔案的相關資訊。
服務:
AttachedPropertiesService:允許使用 AddProperty,將屬性加入至目前執行個體。
DesignerView:允許存取設計工具畫布的屬性。
IActivityToolboxService:允許更新工具箱的內容。
ICommandService:用來整合設計工具命令 (例如操作功能表) 與提供的自訂服務實作。
IDesignerDebugView:提供設計工具之偵錯工具的功能。
IExpressionEditorService:可讓您存取 [運算式編輯器] 對話方塊。
IIntegratedHelpService:為設計工具提供整合式說明功能。
IValidationErrorService:可讓您使用 ShowValidationErrors 來存取驗證錯誤。
IWorkflowDesignerStorageService:提供內部服務來儲存和擷取資料。 這項服務是供 .NET Framework 內部使用,不適合外部使用。
IXamlLoadErrorService:可讓您使用 ShowXamlLoadErrors 來存取 XAML 載入錯誤集合。
ModelService:設計工具用來與所編輯之工作流程的模型互動。
ModelTreeManager:可讓您使用 Root 來存取模型項目樹狀的根。
UndoEngine:提供復原和取消復原功能。
ViewService:將視覺化項目對應至基礎模型項目。
ViewStateService:儲存模型項目的檢視狀態。
VirtualizedContainerService:用來自訂虛擬容器 UI 行為。
WindowHelperService:用來註冊和取消註冊事件通知的委派。 它也允許設定視窗擁有者。