ModelItem 편집 컨텍스트는 호스트 애플리케이션이 디자이너와 통신하는 데 사용하는 개체입니다. EditingContext는 두 가지 메서드를 노출하며Items, Services 이 메서드를 사용할 수 있습니다.
항목 컬렉션
컬렉션은 Items 호스트와 디자이너 간에 공유되는 데이터 또는 모든 디자이너에서 사용할 수 있는 데이터에 액세스하는 데 사용됩니다. 이 컬렉션은 ContextItemManager 클래스를 통해 액세스할 수 있는 다음과 같은 기능을 제공합니다.
서비스 컬렉션
이 Services 컬렉션은 디자이너가 호스트와 상호 작용하는 데 사용하는 서비스 또는 모든 디자이너가 사용하는 서비스에 액세스하는 데 사용됩니다. 이 컬렉션에는 다음과 같은 주목할 만한 메서드가 있습니다.
디자이너에 작업 할당
활동에서 사용하는 디자이너를 지정하기 위해 디자이너 특성이 사용됩니다.
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
서비스 만들기
디자이너와 호스트 간의 정보 통로 역할을 하는 서비스를 만들려면 인터페이스와 구현을 만들어야 합니다. 인터페이스는 메서드에서 Publish 서비스의 멤버를 정의하는 데 사용되며 구현에는 서비스에 대한 논리가 포함됩니다. 다음 코드 예제에서는 서비스 인터페이스 및 구현이 만들어집니다.
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
} ;
}
}
서비스 게시
디자이너가 서비스를 사용하려면 먼저 호스트가 Publish 메서드를 사용하여 게시해야 합니다.
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
서비스 구독
디자이너는 Subscribe 메서드 내에서 OnModelItemChanged 메서드를 사용하여 서비스에 대한 액세스를 얻습니다. 다음 코드 조각은 서비스를 구독하는 방법을 보여 줍니다.
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;
}
}
Items 컬렉션을 사용하여 데이터 공유
Items 컬렉션을 사용하는 것은 Services 컬렉션을 사용하는 것과 유사하지만, 게시 대신 SetValue를 사용합니다. 이 컬렉션은 복잡한 기능보다는 디자이너와 호스트 간에 간단한 데이터를 공유하는 데 더 적합합니다.
EditingContext 호스트 항목 및 서비스
.NET Framework는 편집 컨텍스트를 통해 액세스되는 여러 기본 제공 항목 및 서비스를 제공합니다.
항목:
AssemblyContextControlItem: 워크플로 내에서 컨트롤(예: 식 편집기)에 사용할 참조된 로컬 어셈블리 목록을 관리합니다.
ReadOnlyState: 디자이너가 읽기 전용 상태인지 여부를 나타냅니다.
Selection: 현재 선택된 개체의 컬렉션을 정의합니다.
WorkflowFileItem: 현재 편집 세션의 기반이 되는 파일에 대한 정보를 제공합니다.
서비스:
AttachedPropertiesService: .를 사용하여 현재 인스턴스에 속성을 추가할 수 있습니다 AddProperty.
DesignerView: 디자이너 캔버스의 속성에 액세스할 수 있습니다.
IActivityToolboxService: 도구 상자의 내용을 업데이트할 수 있습니다.
ICommandService: 디자이너 명령(예: 상황에 맞는 메뉴)을 사용자 지정 제공 서비스 구현과 통합하는 데 사용됩니다.
IDesignerDebugView: 디자이너 디버거에 대한 기능을 제공합니다.
IExpressionEditorService: 식 편집기 대화 상자에 대한 액세스를 제공합니다.
IIntegratedHelpService: 디자이너에 통합 도움말 기능을 제공합니다.
IValidationErrorService: ShowValidationErrors를 사용하여 유효성 검사 오류에 대한 액세스를 제공합니다.
IWorkflowDesignerStorageService: 데이터를 저장하고 검색하는 내부 서비스를 제공합니다. 이 서비스는 .NET Framework에서 내부적으로 사용되며 외부 용도로 사용되지 않습니다.
IXamlLoadErrorService: 를 사용하여 ShowXamlLoadErrorsXAML 로드 오류 컬렉션에 대한 액세스를 제공합니다.
ModelService: 디자이너가 편집 중인 워크플로의 모델과 상호 작용하는 데 사용됩니다.
ModelTreeManager: .를 사용하여 Root모델 항목 트리의 루트에 대한 액세스를 제공합니다.
UndoEngine: 실행 취소 및 다시 실행 기능을 제공합니다.
ViewService: 시각적 요소를 기본 모델 항목에 매핑합니다.
ViewStateService: 모델 항목의 뷰 상태를 저장합니다.
VirtualizedContainerService: 가상 컨테이너 UI 동작을 사용자 지정하는 데 사용됩니다.
WindowHelperService: 이벤트 알림에 대한 대리자를 등록 및 등록 취소하는 데 사용됩니다. 또한 창 소유자를 설정할 수 있습니다.
.NET