使用 ModelItem 编辑上下文

ModelItem 编辑上下文是主机应用程序用来与设计器进行通信的对象。 EditingContext 公开两个可以使用的方法:ItemsServices

项集合

Items 集合用于访问主机与设计器之间共享的数据或所有设计器都可以使用的数据。 通过 ContextItemManager 类访问时,此集合具有以下功能:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

服务集合

Services 集合用于访问设计器用来与主机交互的服务或访问所有设计器都使用的服务。 此集合有以下需要注意的方法:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

为活动指定设计器

为指定活动要使用的设计器,使用了 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;
    }  
}  

使用项集合共享数据

使用项集合与使用服务集合类似,但使用的是 SetValue,而不是 Publish。 此集合更适合在设计器与主机之间的共享简单的数据,不适合复杂的功能。

EditingContext 主机项和服务

.NET Framework 提供了大量通过编辑上下文访问的内置项和服务。

项:

服务: