题
我开始爱好项目,以了解WPF和在我reasearch我stumpled在这WPF PropertyGrid http://www.codeplex.com/wpg
我下载源 http://wpg.codeplex.com/SourceControl/ListDownloadableCommits.aspx ,并开始通过它浏览,看起来很酷,工作。但对于我的生活,我不能找出它是如何工作的。以下的问题是什么我留在第一目了然。
- 它怎么知道是什么性质的对象?
- 它怎么渲染的控制,以编辑一个价值?
- 它是如何决定什么样的控制呈现?(我猜元数据说明性质)
我了解DependancyProperties处理dataexchange之间的新的价值观。
- 哪里是XAML或代码代码隐藏,所有的魔法?
有很多停码的默认。xaml文件,但我可以告诉它仅仅是风格,并看起来是定义的存在。
解决方案
- 它怎么知道是什么性质的对象?
它使用 System.ComponentModel.TypeDescriptor
的确定性这一类型有通过 TypeDescriptor.GetProperties
.一个 PropertyDescriptor
提供了丰富的信息有关的每个酒店(例如, PropertyDescriptor.IsReadOnly
会告诉你一个酒店是只读的).另外,使用 PropertyDescriptor.GetValue
和 PropertyDescriptor.SetValue
, 值的特性可以得到和写到。
- 它怎么渲染的控制,以编辑一个价值?
- 它是如何决定什么样的控制呈现?(我猜元数据说明性质)
它使用一个自定义控制称为 PropertyGrid
这暴露了一个 ObservableCollection
的 Item
s. Item
仅仅是一个基类为核心的模型对象 Property
. Property
公开的基础类型(PropertyDescritor.PropertyType
)的财产和公开的 PropertyDescriptor.GetValue
和 PropertyDescriptor.SetValue
方法通过 Property.Value
.这样,反过来,是什么势必使的编辑。 DataTemplate
s 是这里的关键。几CLR类型有定义 DataTemplate
s呈现的控制着你看到的。例如, Boolean
类型是呈现为 CheckBox
虽然一个 Enum
是呈现为 ComboBox
.默认的 DataTemplate
是一个 TextBox
.
- 哪里是XAML或代码代码隐藏,所有的魔法?
所倾向的是在 Themes\Default.xaml
.
代码可以被总结为这样。有数据(Data\Property
)封装了有关属性的信息的对象,并提供了一个酒店(Property.Value
)阅读和书写的价值的财产。这个数据是作为一个 ObservableCollection
在一定的控制(PropertyGrid
)是呈现的使用 DataTemplate
s在 Themes\Default.xaml
.
有很多停码的默认。xaml文件,但我可以告诉它仅仅是风格,并看起来是定义的存在。
不要忽视 DataTemplate
s.
其他提示
- 它怎么知道是什么性质的对象?
如果工作相同的方式作为Windows形式财产的网格,这并如下:
- 如果对象实现ICustomTypeDescriptor,获得的性质,从这个界面(与GetProperties方法)
- 否则,使用反思的对象的类型(obj。GetType().GetProperties()
对于其他问题...嗯,我还没有看码的,所以我不能答案;)