See the question and my original answer on StackOverflow

This is rather unusual as Plutonix commented, but here is a way to do it.

Just use the following TypeConverter on the Members property. Since the PropertyGrid is based on properties, you have to create fake properties that represent each member. That's what represents the MemberDescriptor class here.

public class MyTypeConverter : TypeConverter
{
    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType != typeof(string))
            return base.ConvertTo(context, culture, value, destinationType);

        List<Member> members = value as List<Member>;
        if (members == null)
            return "-";

        return string.Join(", ", members.Select(m => m.Name));
    }

    public override bool GetPropertiesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
    {
        List<PropertyDescriptor> list = new List<PropertyDescriptor>();
        List<Member> members = value as List<Member>;
        if (members != null)
        {
            foreach (Member member in members)
            {
                if (member.Name != null)
                {
                    list.Add(new MemberDescriptor(member, list.Count));
                }
            }
        }
        return new PropertyDescriptorCollection(list.ToArray());
    }

    private class MemberDescriptor : SimplePropertyDescriptor
    {
        public MemberDescriptor(Member member, int index)
            : base(member.GetType(), index.ToString(), typeof(string))
        {
            Member = member;
        }

        public Member Member { get; private set; }

        public override object GetValue(object component)
        {
            return Member.Name;
        }

        public override void SetValue(object component, object value)
        {
            Member.Name = (string)value;
        }
    }
}

As a bonus, I have also added the conversion to string so it looks nicer:

enter image description here