关于复杂属性的设计
最近几天没怎么弄,那个复杂属性无法实现数据的页面持久性也一直没搞定,没怎么研究它,今天弄了一下,莫名其妙的好了,还没明白是为什么,看来还是有必要深入研究一下的。
现在的问题是,对于包含复杂属性的类型,只暴露其读属性,而子属性暴露读写属性,结合类型转换器,在设计期编辑复杂属性,却不能在页面代码中显示编辑的属性值;当将复杂属性暴露读写属性时,则在页面代码中分别显示复杂属性的值及其子属性的值;当将子属性只暴露其读属性,则在页面代码中只显示复杂属性的值。
目标是实现暴露复杂类型的只读属性,在其子属性中设置值,在页面代码中保持持久性。
首先,对于继承自Control类的基类,必须实现ParseChildren(true)和PersistChildren(false)这两个元数据attribute;
其次,对于复杂类型及其子属性,都需要应用NotifyParentProperty元数据attribute,否则在复杂属性或子属性中设定的值都不能传给子属性或父属性;
最后,实现复杂属性,必须使用DesignerSerializationVisibility(DesignerSerializationVisibility.Content)元数据attribute,对于复杂属性在页面中的持久保存方式,实现PersistenceMode元数据attribute即可。
现在的问题是,对于包含复杂属性的类型,只暴露其读属性,而子属性暴露读写属性,结合类型转换器,在设计期编辑复杂属性,却不能在页面代码中显示编辑的属性值;当将复杂属性暴露读写属性时,则在页面代码中分别显示复杂属性的值及其子属性的值;当将子属性只暴露其读属性,则在页面代码中只显示复杂属性的值。
目标是实现暴露复杂类型的只读属性,在其子属性中设置值,在页面代码中保持持久性。
首先,对于继承自Control类的基类,必须实现ParseChildren(true)和PersistChildren(false)这两个元数据attribute;
其次,对于复杂类型及其子属性,都需要应用NotifyParentProperty元数据attribute,否则在复杂属性或子属性中设定的值都不能传给子属性或父属性;
最后,实现复杂属性,必须使用DesignerSerializationVisibility(DesignerSerializationVisibility.Content)元数据attribute,对于复杂属性在页面中的持久保存方式,实现PersistenceMode元数据attribute即可。
posted on 2006-03-15 09:36 ............. 阅读(87) 评论(0) 收藏 举报
浙公网安备 33010602011771号