Używanie kontekstu edycyjnego ModelItem
Kontekst ModelItem edycji jest obiektem używanym przez aplikację hosta do komunikowania się z projektantem. EditingContext uwidacznia dwie metody i ItemsServices, których można użyć
Kolekcja Items
Kolekcja służy do uzyskiwania Items dostępu do danych udostępnianych między hostem a projektantem lub danymi dostępnymi dla wszystkich projektantów. Ta kolekcja ma następujące możliwości dostępne za pośrednictwem ContextItemManager klasy :
Kolekcja usług
Kolekcja służy do uzyskiwania Services dostępu do usług używanych przez projektanta do interakcji z hostem lub usługami używanymi przez wszystkich projektantów. Ta kolekcja ma następujące metody:
Przypisywanie projektanta działania
Aby określić, którego projektanta używa działanie, jest używany atrybut Projektant.
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
Tworzenie usługi
Aby utworzyć usługę, która służy jako kanał informacyjny między projektantem a hostem, należy utworzyć interfejs i implementację. Interfejs jest używany przez metodę Publish do definiowania elementów członkowskich usługi, a implementacja zawiera logikę usługi. W poniższym przykładzie kodu tworzony jest interfejs usługi i implementacja.
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
} ;
}
}
Publikowanie usługi
Aby projektant mógł korzystać z usługi, musi najpierw zostać opublikowany przez hosta przy użyciu Publish metody .
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
Subskrybowanie usługi
Projektant uzyskuje dostęp do usługi przy użyciu Subscribe metody w metodzie OnModelItemChanged . Poniższy fragment kodu przedstawia sposób subskrybowania usługi.
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;
}
}
Udostępnianie danych przy użyciu kolekcji Items
Użycie kolekcji Items jest podobne do kolekcji Usługi, z tą różnicą, że SetValue jest używana zamiast publikowania. Ta kolekcja jest bardziej odpowiednia do udostępniania prostych danych między projektantami a hostem, a nie złożonymi funkcjami.
Edytowanie elementów i usług hosta w formacieContext
Program .NET Framework udostępnia wiele wbudowanych elementów i usług, do których dostęp uzyskuje się za pośrednictwem kontekstu edycji.
Elementy:
AssemblyContextControlItem: zarządza listą odwołanych zestawów lokalnych, które będą używane wewnątrz przepływu pracy dla kontrolek (takich jak edytor wyrażeń).
ReadOnlyState: wskazuje, czy projektant jest w stanie tylko do odczytu.
Selection: definiuje kolekcję obiektów, które są aktualnie zaznaczone.
WorkflowFileItem: zawiera informacje na temat pliku, na podstawie którego jest oparta bieżąca sesja edycji.
Usługi:
AttachedPropertiesService: Umożliwia dodanie właściwości do bieżącego wystąpienia przy użyciu polecenia AddProperty.
DesignerView: umożliwia dostęp do właściwości kanwy projektanta.
IActivityToolboxService: umożliwia zaktualizowanie zawartości przybornika.
ICommandService: służy do integrowania poleceń projektanta (takich jak Menu kontekstowe) z niestandardowymi implementacjami usług.
IDesignerDebugView: udostępnia funkcje debugera projektanta.
IExpressionEditorService: zapewnia dostęp do okna dialogowego Edytor wyrażeń.
IIntegratedHelpService: udostępnia projektantowi zintegrowane funkcje pomocy.
IValidationErrorService: zapewnia dostęp do błędów walidacji przy użyciu polecenia ShowValidationErrors.
IWorkflowDesignerStorageService: udostępnia wewnętrzną usługę do przechowywania i pobierania danych. Ta usługa jest używana wewnętrznie przez program .NET Framework i nie jest przeznaczona do użytku zewnętrznego.
IXamlLoadErrorService: zapewnia dostęp do kolekcji błędów ładowania XAML przy użyciu polecenia ShowXamlLoadErrors.
ModelService: używany przez projektanta do interakcji z modelem edytowanego przepływu pracy.
ModelTreeManager: zapewnia dostęp do katalogu głównego drzewa elementów modelu przy użyciu polecenia Root.
UndoEngine: Udostępnia funkcje cofania i ponownego ponownego wdrażania.
ViewService: Mapy elementów wizualizacji do podstawowych elementów modelu.
ViewStateService: przechowuje stany widoku dla elementów modelu.
VirtualizedContainerService: służy do dostosowywania zachowania interfejsu użytkownika kontenera wirtualnego.
WindowHelperService: służy do rejestrowania i wyrejestrowania delegatów na potrzeby powiadomień o zdarzeniach. Umożliwia również ustawienie właściciela okna.