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 集合类似于使用 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:用于注册和注销事件通知的委托。 还允许设置窗口所有者。