Używanie kontekstu edycji ModelItem

Kontekst ModelItem edycji jest obiektem używanym przez aplikację hosta do komunikowania się z projektantem. EditingContext udostępnia dwie metody: Items i Services, które można użyć

Kolekcja Items

Kolekcja Items jest używana do uzyskiwania dostępu do danych udostępnianych między hostem a projektantem lub danych dostępnych dla wszystkich projektantów. Ta kolekcja ma następujące możliwości dostępne za pośrednictwem ContextItemManager klasy :

  1. GetValue

  2. Subscribe

  3. Unsubscribe

  4. SetValue

Kolekcja usług

Kolekcja Services jest używana do uzyskiwania dostępu do usług, które projektant wykorzystuje do interakcji z hostem, lub usług, które są używane przez wszystkich projektantów. Ta kolekcja ma następujące istotne metody:

  1. Publish

  2. Subscribe

  3. Unsubscribe

  4. GetService

Przypisywanie projektantowi zadania

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 ona zostać najpierw opublikowana przez hosta przy użyciu metody Publish.

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

Subskrybowanie usługi

Projektant uzyskuje dostęp do usługi przy użyciu metody Subscribe 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 Services, z tą różnicą, że SetValue jest używane zamiast Publish. Ta kolekcja jest bardziej odpowiednia do udostępniania prostych danych między projektantami a hostem, niż do udostępniania złożonych funkcji.

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ą lokalnych zestawów odniesienia, które będą używane wewnątrz przepływu pracy związanej z kontrolkami (takimi jak edytor wyrażeń).

  • ReadOnlyState: wskazuje, czy oprogramowanie jest w stanie tylko do odczytu.

  • Selection: definiuje kolekcję obiektów, które są aktualnie zaznaczone.

  • WorkflowCommandExtensionItem:

  • WorkflowFileItem: zawiera informacje na temat pliku, na podstawie którego jest oparta bieżąca sesja edycji.

Usługi: