Utilizzo del contesto di modifica ModelItemUsing the ModelItem Editing Context

Il contesto di modifica ModelItem è l'oggetto usato dall'applicazione host per comunicare con la finestra di progettazione.The ModelItem editing context is the object that the host application uses to communicate with the designer. EditingContext espone due metodi utilizzabili, Items e Services.EditingContext exposes two methods, Items and Services, which can be used

La raccolta ItemsThe Items collection

La raccolta Items viene usata per accedere ai dati condivisi tra l'host e la finestra di progettazione o ai dati disponibili a tutte le finestre di progettazione.The Items collection is used to access data that is shared between the host and the designer, or data that is available to all designers. La raccolta dispone delle seguenti funzionalità, accessibili tramite la classe ContextItemManager:This collection has the following capabilities, accessed via the ContextItemManager class:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

La raccolta ServicesThe Services collection

La raccolta Services viene usata per accedere ai servizi usati dalla finestra di progettazione per interagire con l'host o ai servizi usati da tutte le finestre di progettazione.The Services collection is used to access services that the designer uses to interact with the host, or services that all designers use. Questa raccolta dispone dei principali metodi seguenti:This collection has the following methods of note:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Assegnazione di un'attività a una finestra di progettazioneAssigning a designer an activity

Per specificare quale finestra di progettazione viene usata da un'attività, viene usato l'attributo Designer.To specify which designer an activity uses, the Designer attribute is used.

[Designer(typeof(MyClassDesigner))]  
public sealed class MyClass : CodeActivity  
{  

Creazione di un servizioCreating a service

Per creare un servizio con la funzione di condotto di informazioni tra la finestra di progettazione e l'host, è necessario creare un'interfaccia e un'implementazione.To create a service that serves as a conduit of information between the designer and the host, an interface and an implementation must be created. L'interfaccia viene usata dal metodo Publish per definire i membri del servizio e l'implementazione contiene la logica del servizio.The interface is used by the Publish method to define the members of the service, and the implementation contains the logic for the service. Nell'esempio di codice seguente vengono create l'interfaccia e l'implementazione di un servizio.In the following code example, a service interface and implementation are created.

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

Pubblicazione di un servizioPublishing a service

Affinché una finestra di progettazione utilizzi un servizio, questo deve essere prima pubblicato dal host usando il metodo Publish.For a designer to consume a service, it must first be published by the host using the Publish method.

this.Context.Services.Publish<IMyService>(new MyServiceImpl);  

Sottoscrizione di un servizioSubscribing to a service

La finestra di progettazione ottiene accesso al servizio usando il metodo Subscribe nel metodo OnModelItemChanged.The designer obtains access to the service using the Subscribe method in the OnModelItemChanged method. Nel frammento di codice seguente viene mostrato come sottoscrivere un servizio.The following code snippet demonstrates how to subscribe to a service.

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

Condivisione di dati tramite la raccolta ItemsSharing data using the Items collection

L'utilizzo della raccolta Items è simile all'utilizzo della raccolta Services, tranne che si usa SetValue anziché Publish.Using the Items collection is similar to using the Services collection, except that SetValue is used instead of Publish. Questa raccolta è più adatta per la condivisione di dati semplici tra le finestre di progettazione e l'host che per funzionalità complesse.This collection is more appropriate for sharing simple data between the designers and the host, rather than complex functionality.

Elementi e servizi host di EditingContextEditingContext host items and services

.NET Framework fornisce una serie di elementi e servizi incorporati accessibili tramite il contesto di modifica.The .Net Framework provides a number of built-in items and services accessed through the editing context.

Elementi:Items:

Servizi:Services: