- Как узнать, какими свойствами обладает объект?
Он использует System.ComponentModel.TypeDescriptor
для определения свойств, которые имеет тип через TypeDescriptor.GetProperties
. A PropertyDescriptor
предоставляет обширную информацию о каждом объекте (например, PropertyDescriptor.IsReadOnly
сообщит вам, что объект доступен только для чтения). Далее, используя PropertyDescriptor.GetValue
и PropertyDescriptor.SetValue
, значения свойств могут быть получены и записаны.
- Как визуализировать элемент управления для редактирования значения?
- Как он решает, какой элемент управления визуализировать? (я предполагаю описания метаданных о свойствах)
Он использует пользовательский элемент управления, называемый PropertyGrid
, который выставляет ObservableCollection
из Item
с. Item
- это просто базовый класс для объекта базовой модели, который является Property
. Property
предоставляет базовый тип (PropertyDescritor.PropertyType
) свойства и предоставляет методы PropertyDescriptor.GetValue
и PropertyDescriptor.SetValue
через Property.Value
. Это, в свою очередь, то, что должно включить редактирование. DataTemplate
s являются ключом здесь. Несколько типов CLR имеют пользовательские DataTemplate
, которые отображают элементы управления, которые вы видите. Например, тип Boolean
отображается как CheckBox
, а Enum
- как ComboBox
. По умолчанию DataTemplate
является TextBox
.
- Где находится код XAML или CodeBehind, который делает всю магию?
Склонность к этому в Themes\Default.xaml
.
Код можно обобщить следующим образом. Существуют данные (Data\Property
), которые инкапсулируют информацию о свойствах объекта и предоставляют свойство (Property.Value
) для чтения и записи значения свойства. Эти данные отображаются как ObservableCollection
в пользовательском элементе управления (PropertyGrid
), который отображается с использованием DataTemplate
s в Themes\Default.xaml
.
В файле Default.xaml много кода XAML, но, насколько я могу судить, это только стили и внешний вид, которые здесь определены.
Не пропустите DataTemplate
с.