속성 편집 아키텍처
개체 속성의 시각적 편집은 WPF Designer for Visual Studio의 중요한 기능입니다. 이 항목에서는 WPF Designer 속성 편집 시스템의 아키텍처에 대해 설명합니다.
속성 엔트리
PropertyEntry 클래스는 속성 자체를 나타냅니다. PropertyValue 클래스는 속성의 내부 값을 나타냅니다.
범주 편집기
범주 편집기를 사용하면 최종 사용자가 한 범주 내의 여러 속성을 동시에 편집할 수 있습니다. 범주 편집기와 연결된 속성은 속성 창 외에서는 표시되지 않습니다. 범주 편집기로 편집하지 않는 속성은 표시되며 편집할 수 있습니다. 범주 편집기로 편집할 범주의 속성을 지정할 수 있습니다.
속성 값 편집기
속성 값 편집기는 시각적 디자이너의 속성 창에서 특정 형식이 표시되고 편집되는 방법을 정의합니다. WPF Designer에서 속성 값 편집기가 수행하는 역할은 System.ComponentModel 아키텍처에서 UITypeEditor 클래스가 하는 역할과 비슷합니다. 그러나 WPF Designer 편집기는 System.ComponentModel 및 Windows Forms 아키텍처에 독립적입니다.
PropertyValueEditor는 다음 표에 나오는 파트로 구성됩니다.
속성 값 편집기 파트 |
설명 |
---|---|
인라인 편집기(또는 뷰) |
호스팅 속성 창의 뷰와 같은 물리적 공간에서 호스팅되는 편집기입니다. Margin 속성 편집기를 예로 들 수 있습니다. |
확장 편집기 |
일반적으로 내부에서 호스팅되지 않는 편집기입니다. System.ComponentModel 아키텍처의 드롭다운 스타일 편집기에 해당합니다. HorizontalAlignment 속성 편집기를 예로 들 수 있습니다. |
대화 상자 |
자체의 대화 상자에 구현되는 편집기입니다. RowDefinitions 속성 편집기를 예로 들 수 있습니다. |
뷰 및 인라인 편집기 파트에는 기본값을 사용할 수 있습니다. 확장 편집기 파트를 제공하는 데는 PropertyValueEditor가 필요하지 않습니다.
각 파트는 WPF DataTemplate이며 각각 독립적으로 사용할 수 있습니다.
호스팅 속성 창은 뷰 및 편집기 주위의 프레임을 제공합니다. 따라서 호스트가 편집기 간에 일관된 스타일을 제공하거나 호스트마다 다른 스타일을 제공할 수 있습니다. 예를 들어, Expression Blend와 Visual Studio는 각각의 속성 창에 서로 다른 모양과 동작을 제공합니다.
WPF 데이터 바인딩 및 표준 WPF RoutedCommand 개체 집합은 호스트와 PropertyValueEditor 파트 간의 통신 메커니즘을 제공합니다.
간단한 예를 들면, 값 편집기 파트가 표준 WPF 컨트롤이 포함된 DataTemplate일 수 있습니다. 좀 더 복잡한 예를 들면, 형식 파트가 사용자 지정 컨트롤을 참조하는 DataTemplate일 수 있습니다.
구현할 수 있는 속성 값 편집기의 종류는 세 가지이며 다음 표에서는 이러한 속성 값 편집기에 대해 설명합니다.
속성 값 편집기 종류 |
설명 |
---|---|
단순 |
속성 값 편집기가 인라인 편집기로 구성됩니다. |
확장 |
속성 값 편집기가 인라인 편집기와 확장 편집기로 구성됩니다. |
대화 상자 |
속성 값 편집기가 인라인 편집기와 대화 상자로 구성됩니다. |
인프라 클래스
인프라 클래스는 모든 속성 값 편집기를 구현하는 데 필요합니다. 다음 표에서는 값 편집기를 호스팅하거나 제작하는 데 필요한 핵심 인프라를 구성하는 인프라 클래스를 보여 줍니다.
인프라 클래스 |
설명 |
---|---|
속성의 값을 나타냅니다. |
|
값 편집기에 대한 기본 클래스입니다. |
|
RoutedCommand 형식 및 해당 명령에 대한 기본 처리기 구현입니다. |
|
대화 상자 값 편집기에 대한 추상 기본 클래스입니다.
|
속성 값 편집기 구현
다음 단원에서는 속성 값 편집기 구현의 여러 측면에 대해 설명합니다.
Value, StringValue 및 Collection
PropertyValue 모델에는 속성 값과 관련된 세 가지 속성이 있습니다. 다음 표에서는 PropertyValue 속성에 대해 설명합니다.
PropertyValue 속성 |
설명 |
---|---|
데이터의 개체 표현입니다. |
|
데이터의 문자열 표현이며 데이터의 표시나 serialization에 사용할 수 있습니다. |
|
데이터의 컬렉션 표현입니다. |
StringValue는 데이터의 문자열 표현이며 데이터의 표시나 serialization에 사용할 수 있습니다. Value 및 StringValue는 설정된 모든 호출을 캐시합니다.
StringValue에 대한 캐시는 Value가 설정될 때 플러시됩니다. 일반적인 시나리오에서는 사용자 형식으로 디자인하는 속성에 대해 동적 업데이트를 지원하며 이 경우 StringValue는 텍스트 입력에 바인딩된 데이터입니다. 그러나 기본 속성은 동적 텍스트가 특정 조건을 만족할 때만 설정됩니다.
PropertyValueEditor 요구 사항
올바르게 구현된 속성 값 편집기는 다음 요구 사항을 만족해야 합니다.
인라인 편집기와 확장 편집기 파트를 독립적으로 사용할 수 있도록 속성 값 편집기를 디자인해야 합니다.
속성 값 편집기가 상태를 저장하지 않아야 합니다. 속성 값 편집기는 상태 비저장 편집기입니다. 속성 값 편집기는 호스트 구현에서 캐시할 수 있으며 여러 속성 값에서 다시 사용될 수 있습니다.
속성 값 편집기는 값 편집기 파트(뷰/인라인/확장)가 한 번에 하나만 활성 상태에 있지 않습니다. 예를 들어, 대화 상자의 뷰 파트, 인라인 파트, 확장 UI 파트가 동시에 활성 상태일 수 있습니다.
속성 값 편집기의 파트로 구현된 컨트롤은 상태를 저장하지 않아야 합니다. 값 편집기의 파트로 구현된 컨트롤은 컨트롤이 하나의 속성 값에만 바인딩되지는 않습니다. 즉, 다른 속성 값을 변경하기 위해 컨트롤이 재활용될 수 있습니다. 캐시된 정보는 데이터 모델이 업데이트되면 플러시되어야 합니다.
속성 값 편집기의 파트로 구현된 컨트롤은 호스트 또는 해당 부모 컨트롤에 대해 어떠한 가정도 하지 않아야 합니다. PropertyValue 데이터 모델, DataContext 경유, 그리고 표준 명령 집합만 통신 메커니즘으로 사용해야 합니다.