使用TypeDescriptor动态添加属性级别的属性,以便在PropertyGrid中使用

6
我希望在网格中动态添加属性(比如Browsable(false))。场景是我有一个自定义类,其中包含一些公共属性。然而,我不想将所有公共属性显示在UI中。有什么解决方法吗?
我尝试使用TypeDescriptor。但是,它只能在类型级别上工作,而不能在属性级别上工作。我找不到任何有关如何在属性级别上使用它的帮助。
非常感谢任何指针。

可以的,我在我的问题中提供了完整的实现 https://dev59.com/uGct5IYBdhLWcg3wXsQy#12143653 - Gman
2个回答

3
我在这个领域工作了几天,简而言之,我得出结论这是不可能的。
您尝试在运行时应用属性的原因是因为您不想将“UI”代码与您的自定义类混合在一起吗?
如果是这种情况,BrowsableAttribute是ComponentModel的成员(http://msdn.microsoft.com/en-us/library/system.componentmodel.aspx),并且与WinForms不同,不是与UI相关的。
卡尔

2

实际上,这是可能的,但我必须承认它相当晦涩和文档不足。关键是要从System.ComponentModel.TypeDescriptionProvider派生自己的自定义TypeDescriptorProvider。然后,您可以返回自己的TypeDescriptor子类。

我这样做是为了解决ASP.NET MVC中ViewModel和元数据方面的一个相当严重的限制,但您也可以使用它来插入自己的额外元数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接