ModelItem 編輯上下文是主應用程式用來與設計師通訊的物件。 EditingContext 提供兩種方法:Items 和 Services,這兩種方法可以使用。
項目集合
集合 Items 可用來存取主機與設計工具之間共享的數據,或可供所有設計工具使用的數據。 此集合具有下列功能,可透過 ContextItemManager 類別存取:
服務集合
集合 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 提供一些透過編輯內容存取的內建項目和服務。
項目
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:用來註冊和取消註冊事件通知的委派。 也允許設定窗口擁有者。