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