Custom property names in PropertyGrid?

Eric Smith picture Eric Smith · Sep 17, 2009 · Viewed 14.5k times · Source

I have a class that I use in a PropertyGrid. I found that by setting CategoryAttribute on each property it creates a new category for each item, obviously. This sets my property grid to have a [+] for each item with my custom name in it, and this isn't the behavior I'm trying to achieve.

In Visual Studio, if you click on an item in the Solution Explorer, say, an assembly, it has zero tree nodes and just a list of perfectly-named properties, i.e. any string can identify a property, not just the object's name. So instead of having this:

[+ File Path]
    FilePath | propertyValue
[+ File Size]
    FileSize | 0 KB

I'm looking for this:

[+ File]
    File Path | value
    File Size | 0 KB

Or even the above without the initial [+] node. I've poured through the System.ComponentModel namespace looking for an applicable attribute but I can't find one.

How can I achieve this effect? It must be possible, Visual Studio does it and I believe they're the same component, not a derived and extended one.

Answer

Tom Anderson picture Tom Anderson · Sep 17, 2009

Use the DisplayNameAttribute to change what text displays (make it more human readable), the DescriptionAttribute to add help text to the property, and the CategoryAttribute to group the properties..

using System.ComponentModel;

[Category("Test")]
[DisplayName("Test Property")]
[Description("This is the description that shows up")]
public string TestProperty {get;set;}