Verwenden des ModelItem-Bearbeitungskontexts

Der ModelItem-Bearbeitungskontext ist das Objekt, mit dem die Hostanwendung mit dem Designer kommuniziert. EditingContext macht die beiden Methoden Items und Services verfügbar, die verwendet werden können.

Items-Auflistung

Die Items-Auflistung wird verwendet, um auf Daten zuzugreifen, die zwischen dem Host und dem Designer freigegeben werden oder die in allen Designern zur Verfügung stehen. Diese Auflistung verfügt über die folgenden Funktionen, auf die über die ContextItemManager-Klasse zugegriffen werden kann:

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

Services-Auflistung

Die Services-Auflistung wird verwendet, um auf Dienste zuzugreifen, mit denen der Designer mit dem Host interagiert oder die von allen Designern verwendet werden. Diese Auflistung verfügt über die folgenden relevanten Methoden:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Zuweisen einer Aktivität zu einem Designer

Um anzugeben, welchen Designer eine Aktivität verwendet, wird das Designer-Attribut verwendet.

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

Erstellen eines Diensts

Zum Erstellen eines Diensts, der als Informationskanal zwischen dem Designer und dem Host agiert, müssen eine Schnittstelle und eine Implementierung erstellt werden. Die Schnittstelle wird von der Publish-Methode verwendet, um die Member des Diensts zu definieren. Die Implementierung enthält die Logik für den Dienst. Im folgenden Codebeispiel werden eine Dienstschnittstelle und eine Implementierung erstellt.

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

Veröffentlichen eines Diensts

Damit ein Designer einen Dienst nutzt, muss dieser zuerst vom Host mit der Publish-Methode veröffentlicht werden.

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

Abonnieren eines Diensts

Der Designer erhält mithilfe der Subscribe-Methode in der OnModelItemChanged-Methode Zugriff auf den Dienst. Der folgende Codeausschnitt veranschaulicht, wie ein Dienst abonniert wird.

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

Freigeben von Daten mithilfe der Items-Auflistung

Das Verwenden der Items-Auflistung ähnelt der Verwendung der Services-Auflistung, außer dass SetValue anstelle von "Publish" verwendet wird. Diese Auflistung eignet sich eher für die Freigabe einfacher Daten zwischen den Designern und dem Host anstatt für die Freigabe komplexer Funktionen.

EditingContext-Hostelemente und -Dienste

.NET Framework stellt eine Reihe von integrierten Elementen und Diensten bereit, auf die über den Bearbeitungskontext zugegriffen wird.

Elemente:

  • AssemblyContextControlItem: Verwaltet die Liste der lokalen Assemblys, auf die verwiesen wird und die im Workflow für Steuerelemente (z. B. Ausdrucks-Editor) verwendet werden.

  • ReadOnlyState: Gibt an, ob der Designer einen schreibgeschützten Zustand aufweist.

  • Selection: Definiert die Auflistung der derzeit ausgewählten Objekte.

  • WorkflowCommandExtensionItem:

  • WorkflowFileItem: Stellt Informationen zur Datei bereit, auf der die aktuelle Bearbeitungssitzung basiert.

Dienste: