Как просмотреть свойства объекта в PropertyGrid?

В данный момент у меня есть объект типа A, который просматривается PropertyGrid. Однако одно из его свойств имеет тип B. Свойство, которое имеет тип B, не может расширяться. Как я могу изменить это так, чтобы:

a) Я могу расширить свойство пользовательских объектов б) Эти изменения связаны с этим свойством

Вот код, который у меня есть до сих пор:

using System;
using System.Windows.Forms;
using System.ComponentModel;

namespace PropGridTest
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            A a = new A
            {
                Foo = "WOO HOO!",
                Bar = 10,
                BooFar = new B
                {
                    FooBar = "HOO WOO!",
                    BarFoo = 100
                }
            };

            propertyGrid1.SelectedObject = a;
        }
    }
    public class A
    {
        public string Foo { get; set; }
        public int Bar { get; set; }
        public B BooFar { get; set; }
    }
    public class B
    {
        public string FooBar { get; set; }
        public int BarFoo { get; set; }
    }
}

Ответ 1

Для этой цели вы можете использовать класс ExpandableObjectConverter.

Этот класс добавляет поддержку свойств по объекту к методам и свойства, предоставляемые TypeConverter. Чтобы сделать тип свойства расширяемым в PropertyGrid, укажите это TypeConverter для стандартных реализации GetPropertiesSupported и GetProperties.

Чтобы использовать этот конвертер, украсьте соответствующее свойство TypeConverterAttribute, с typeof(ExpandableObjectConverter) как аргумент конструктора.

public class A
{
    public string Foo { get; set; }
    public int Bar { get; set; }

    [TypeConverter(typeof(ExpandableObjectConverter))]
    public B BooFar { get; set; }
}