我有一个显示列表的属性网格,例如类Person
[TypeConverter(typeof(ExpandableObjectConverter))]
public class Person
{
public bool ShowHidden { get; set; }
public string Name { get; set; }
//[Browsable(false)]
public string Hidden { get; set; }
public override string ToString()
{
return string.Format("Person({0})", Name);
}
}
问题是我如何在运行时控制Browsable()
属性,以便在ShowHidden = false
时省略Hidden
行(下面突出显示为黄色)。
感谢。
答案 0 :(得分:12)
以下是一个例子:
PropertyDescriptor descriptor=
TypeDescriptor.GetProperties(this.GetType())["DataType"];
BrowsableAttribute attrib=
(BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)];
FieldInfo isBrow =
attrib.GetType().GetField("browsable",BindingFlags.NonPublic | BindingFlags.Instance);
isBrow.SetValue(attrib,false);
只需将DataType
替换为您的媒体资源名称即可。
请注意,所有属性都必须更改属性(在本例中为Browsable)。如果其中一个属性缺少该属性,则类属性的全部将获得新的属性设置。
从此处获取的代码:Exploring the Behaviour of Property Grid。