문제

나는 WPF에 대해 배우기 위해 취미 프로젝트를 시작했고 내 재구성 에서이 WPF PropertyGrid를 밟았습니다. http://www.codeplex.com/wpg

소스를 다운로드했습니다 http://wpg.codeplex.com/sourcecontrol/listdownloadablecommits.aspx, 그것을 탐색하기 시작했고, 멋져 보이고, 작동합니다. 그러나 내 삶을 위해, 나는 그것이 어떻게 작동하는지 알 수 없습니다. 다음 질문은 언뜻보기에 남은 것입니다.

  • 객체가 어떤 속성을 가지고 있는지 어떻게 알 수 있습니까?
  • 컨트롤이 값을 편집하기 위해 어떻게 렌더링합니까?
  • 렌더링 할 제어가 어떻게 결정됩니까? (속성에 대한 메타 데이터 설명을 추측하고 있습니다)

EppendancyProperties가 새 값 사이의 DataExChange를 처리한다는 것을 이해합니다.

  • 모든 마술을하는 XAML 또는 CodeBehind 코드는 어디에 있습니까?

default.xaml 파일에는 많은 xaml 코드가 있지만, 내가 말할 수있는 한, 그것은 단지 스타일과 그곳에 정의 된 외관입니다.

도움이 되었습니까?

해결책

  • 객체가 어떤 속성을 가지고 있는지 어떻게 알 수 있습니까?

사용합니다 System.ComponentModel.TypeDescriptor 유형이 보유한 속성을 결정합니다 TypeDescriptor.GetProperties. ㅏ PropertyDescriptor 각 재산에 대한 풍부한 정보를 제공합니다 (예 : PropertyDescriptor.IsReadOnly 재산이 준비되어 있다고 말할 것입니다). 또한 사용 PropertyDescriptor.GetValue 그리고 PropertyDescriptor.SetValue, 속성의 값은 얻어지고 기록 할 수 있습니다.

  • 컨트롤이 값을 편집하기 위해 어떻게 렌더링합니까?
  • 렌더링 할 제어가 어떻게 결정됩니까? (속성에 대한 메타 데이터 설명을 추측하고 있습니다)

a라는 사용자 정의 컨트롤을 사용합니다 PropertyGrid 노출 ObservableCollectionItem에스. Item 핵심 모델 객체의 기본 클래스 일뿐입니다. Property. Property 기본 유형을 드러냅니다 (PropertyDescritor.PropertyType) 재산의) PropertyDescriptor.GetValue 그리고 PropertyDescriptor.SetValue 방법을 통한 방법 Property.Value. 이것은 결국 편집을 가능하게하는 것입니다. DataTemplate에스 여기서 열쇠입니다. 몇 가지 CLR 유형에는 사용자 정의가 있습니다 DataTemplate당신이 보는 컨트롤을 렌더링하는 s. 예를 들어, Boolean 유형은 a로 렌더링됩니다 CheckBox an Enum a ComboBox. 기본값 DataTemplate a TextBox.

  • 모든 마술을하는 XAML 또는 CodeBehind 코드는 어디에 있습니까?

그것의 성향이 있습니다 Themes\Default.xaml.

코드는 따라서 요약 될 수 있습니다. 데이터가 있습니다 (Data\Property) 객체의 속성에 대한 정보를 캡슐화하고 속성을 제공합니다 (Property.Value) 재산의 가치를 읽고 쓰기 위해. 이 데이터는 An으로 노출됩니다 ObservableCollection 사용자 정의 컨트롤에서 (PropertyGrid) 사용을 렌더링합니다 DataTemplates in Themes\Default.xaml.

default.xaml 파일에는 많은 xaml 코드가 있지만, 내가 말할 수있는 한, 그것은 단지 스타일과 그곳에 정의 된 외관입니다.

간과하지 마십시오 DataTemplate에스.

다른 팁

  • 객체가 어떤 속성을 가지고 있는지 어떻게 알 수 있습니까?

Windows가 속성 그리드를 형성하는 것과 동일한 방식으로 작동하면 다음을 수행합니다.

  • 객체가 iCustomtypedescriptor를 구현하는 경우이 인터페이스에서 속성을 얻습니다 (GetProperties 메소드와 함께)
  • 그렇지 않으면 객체의 유형에 반사를 사용하십시오 (obj.gettype (). getProperties ()

다른 질문들에게 ... 글쎄, 나는 코드를 보지 않았으므로 대답 할 수 없다;)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top