2009-08-19 65 views
6

我想在网格中显示时动态添加属性(如Browsable(false))。情景是我有一个自定义的类与一些公共属性。但是,我不希望所有公共属性都显示在UI中。有出路吗?使用TypeDescriptor为PropertyGrid动态添加属性级属性

我尝试过使用TypeDescriptor。但是,它仅适用于类型级别,而不适用于属性级别。我在物业层面上找不到任何帮助。

任何指针将高度赞赏。

+0

这是可能的,我提供了完整的实现在我的问题http://stackoverflow.com/questions/12143650/how-to-add-property-level-attribute-to-the-typedescriptor-at-runtime/12143653 – Gman 2012-08-27 14:14:58

回答

2

实际上它是可能的,但我不得不承认这是相当模糊和不良记录。关键是从System.ComponentModel.TypeDescriptionProvider派生自己的自定义TypeDescriptorProvider。然后你可以返回你自己的TypeDescriptor后裔。

我这样做是为了解决有关ASP.NET MVC中ViewModels和元数据的相当讨厌的限制,但您也可以使用它来插入自己的额外元数据。

3

过去几天我一直在这个领域工作。长话短说,我得出的结论是不可能的。

是您试图在运行时应用属性的原因,因为您不想将“UI”代码与您的自定义类混合在一起?

如果是这种情况,BrowsableAttribute是ComponentModel(http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx)的成员,与WinForms不同,它与UI没有关系。

卡尔