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:
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:
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.
WorkflowFileItem: Stellt Informationen zur Datei bereit, auf der die aktuelle Bearbeitungssitzung basiert.
Dienste:
AttachedPropertiesService: Erlaubt das Hinzufügen von Eigenschaften zur aktuellen Instanz mithilfe von AddProperty.
DesignerView: Ermöglicht den Zugriff auf die Eigenschaften des Designercanvases.
IActivityToolboxService: Ermöglicht die Aktualisierung des Inhalts der Toolbox.
ICommandService: Wird verwendet, um Designerbefehle (z. B. Kontextmenü) in benutzerdefinierte Dienstimplementierungen zu integrieren.
IDesignerDebugView: Stellt Funktionen für den Debugger des Designers bereit.
IExpressionEditorService: Bietet Zugriff auf das Dialogfeld "Ausdrucks-Editor".
IIntegratedHelpService: Stellt integrierte Hilfefunktionen für den Designer bereit.
IValidationErrorService: Bietet mithilfe von ShowValidationErrors Zugriff auf Validierungsfehler.
IWorkflowDesignerStorageService: Stellt einen internen Dienst zum Speichern und Abrufen von Daten bereit. Dieser Dienst wird von .NET Framework intern verwendet und ist nicht für die externe Verwendung vorgesehen.
IXamlLoadErrorService: Bietet mithilfe von ShowXamlLoadErrors Zugriff auf die XAML-Ladefehlerauflistung.
ModelService: Wird vom Designer verwendet, um mit dem Modell des bearbeiteten Workflows zu interagieren.
ModelTreeManager: Bietet mithilfe von Root Zugriff auf den Stamm der Modellelementstruktur.
UndoEngine: Stellt Funktionen zum Rückgängigmachen und Wiederholen bereit.
ViewService: Ordnet den zugrunde liegenden Modellelementen visuelle Elemente zu.
ViewStateService: Speichert Ansichtszustände für Modellelemente.
VirtualizedContainerService: Wird verwendet, um das Verhalten der Benutzeroberfläche des virtuellen Containers anzupassen.
WindowHelperService: Wird verwendet, um Delegaten für Ereignisbenachrichtigungen zu registrieren und die Registrierung aufzuheben. Ermöglicht auch das Festlegen eines Fensterbesitzers.