使用 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;
    }  
}  

使用项集合共享数据

使用 Items 集合类似于使用 Services 集合,不同之处在于使用 SetValue 而不是使用 Publish。 此集合更适合在设计器和主机之间共享简单数据,而不是复杂的功能。

EditingContext 主机项和服务

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

项:

服务业: