它用于System.ComponentModel.TypeDescriptor
通过 确定类型具有的属性TypeDescriptor.GetProperties
。APropertyDescriptor
提供了关于每个属性的大量信息(例如,PropertyDescriptor.IsReadOnly
会告诉您一个属性是只读的)。此外,使用PropertyDescriptor.GetValue
和PropertyDescriptor.SetValue
,可以获得并写入属性的值。
- 它如何呈现控件以编辑值?
- 它如何决定渲染什么控件?(我猜测属性上的元数据描述)
它使用一个名为 a 的自定义控件PropertyGrid
,它公开了一个ObservableCollection
of Item
s。Item
只是核心模型对象的基类,即Property
. Property
公开属性的底层类型 ( PropertyDescritor.PropertyType
) 并通过 公开PropertyDescriptor.GetValue
和PropertyDescriptor.SetValue
方法Property.Value
。反过来,这必然会启用编辑。DataTemplate
s是这里的关键。一些 CLR 类型具有DataTemplate
呈现您看到的控件的 custom 。例如,Boolean
类型被呈现为CheckBox
whileEnum
被呈现为 a ComboBox
。默认DataTemplate
值为TextBox
.
- 发挥所有魔力的 XAML 或 CodeBehind 代码在哪里?
它的倾向在Themes\Default.xaml
.
代码可以这样概括。有 data ( Data\Property
) 封装了有关对象属性的信息,并提供了 property ( Property.Value
) 来读取和写入属性的值。此数据显示为ObservableCollection
自定义控件 ( ) 中的一个,该控件使用s inPropertyGrid
呈现。DataTemplate
Themes\Default.xaml
Default.xaml 文件中有很多 XAML 代码,但据我所知,它只是在那里定义的样式和外观。
不要小看DataTemplate
s。