如何在PropertyGrid中查看对象属性?

12

目前我有一个类型为A的对象正在被PropertyGrid查看。然而,它的一个属性是类型B。该属性不可扩展。如何更改此设置,以便:

a) 我可以扩展自定义对象属性 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个回答

23

您可以使用ExpandableObjectConverter类来实现此目的。

该类为TypeConverter提供的方法和属性添加了对对象属性的支持。要使属性类型在PropertyGrid中可扩展,请为GetPropertiesSupported和GetProperties的标准实现指定此TypeConverter。

要使用此转换器,请使用TypeConverterAttribute装饰相应的属性,并将typeof(ExpandableObjectConverter)作为构造函数参数。

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

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

谢谢!它完全按照我需要的方式工作。不过大约还需要8分钟左右才能将您的答案标记为正确...但我会的 :D - LunchMarble
太好了,那正是我需要的,我找了一个小时。 - Titwan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接