Utilizzo del contesto di modifica ModelItem

Il contesto di modifica ModelItem è l'oggetto usato dall'applicazione host per comunicare con la finestra di progettazione. EditingContext espone due metodi utilizzabili, Items e Services.

La raccolta Items

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. La raccolta dispone delle seguenti funzionalità, accessibili tramite la classe ContextItemManager:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

La raccolta Services

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. Questa raccolta dispone dei principali metodi seguenti:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Assegnazione di un'attività a una finestra di progettazione

Per specificare quale finestra di progettazione viene usata da un'attività, viene usato l'attributo Designer.

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

Creazione di un servizio

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. L'interfaccia viene usata dal metodo Publish per definire i membri del servizio e l'implementazione contiene la logica del servizio. Nell'esempio di codice seguente vengono create l'interfaccia e l'implementazione di un servizio.

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 servizio

Affinché una finestra di progettazione utilizzi un servizio, questo deve essere prima pubblicato dal host usando il metodo Publish.

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

Sottoscrizione di un servizio

La finestra di progettazione ottiene accesso al servizio usando il metodo Subscribe nel metodo OnModelItemChanged. Nel frammento di codice seguente viene mostrato come sottoscrivere un servizio.

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 Items

L'utilizzo della raccolta Items è simile all'utilizzo della raccolta Services, tranne che si usa SetValue anziché Publish. Questa raccolta è più adatta per la condivisione di dati semplici tra le finestre di progettazione e l'host che per funzionalità complesse.

Elementi e servizi host di EditingContext

.NET Framework fornisce una serie di elementi e servizi incorporati accessibili tramite il contesto di modifica.

Messaggi:

Servizi:

  • AttachedPropertiesService: consente l'aggiunta di proprietà all'istanza corrente tramite AddProperty.

  • DesignerView: consente l'accesso alle proprietà del Canvas della finestra di progettazione.

  • IActivityToolboxService: consente l'aggiornamento del contenuto della casella degli strumenti.

  • ICommandService: usato per integrare i comandi della finestra di progettazione (quale Menu di scelta rapida) con implementazioni del servizio personalizzate.

  • IDesignerDebugView: fornisce funzionalità per il debugger della finestra di progettazione.

  • IExpressionEditorService: fornisce l'accesso alla finestra di dialogo dell'Editor espressioni.

  • IIntegratedHelpService: fornisce funzionalità integrate di Guida alla finestra di progettazione.

  • IValidationErrorService: fornisce l'accesso agli errori di convalida tramite ShowValidationErrors.

  • IWorkflowDesignerStorageService: fornisce un servizio interno per l'archiviazione e il recupero dei dati. Questo servizio viene usato internamente da .NET Framework e non è destinato all'uso esterno.

  • IXamlLoadErrorService: fornisce l'accesso alla raccolta di errori di caricamento XAML tramite ShowXamlLoadErrors.

  • ModelService: usato dalla finestra di progettazione per interagire con il modello del flusso di lavoro modificato.

  • ModelTreeManager: fornisce l'accesso alla radice dell'albero dell'elemento del modello tramite Root.

  • UndoEngine: fornisce funzionalità di rollback e rollforward.

  • ViewService: esegue il mapping degli elementi visivi agli elementi del modello sottostante.

  • ViewStateService: archivia gli stati di visualizzazione per gli elementi del modello.

  • VirtualizedContainerService: usato per personalizzare il comportamento dell'interfaccia utente del contenitore virtuale.

  • WindowHelperService: usato per registrare e annullare la registrazione dei delegati per le notifiche degli eventi. Consente inoltre l'impostazione del proprietario di una finestra.