Как просмотреть свойства объекта в PropertyGrid? - PullRequest
11 голосов
/ 24 апреля 2011

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

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

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

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 Ответ

21 голосов
/ 24 апреля 2011

Для этой цели можно использовать класс 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; }
}
...