C# 在propertygrid中查看嵌套类

C# 在propertygrid中查看嵌套类,c#,winforms,propertygrid,C#,Winforms,Propertygrid,我使用的类来自第三方,无法修改,我希望在winforms propertygrid中查看它们。 问题是网格不允许我扩展嵌套类。看起来像这样 第三方代码如下所示 [System.Xml.Serialization.XmlRoot("BBB")] [DataContract] public class B : INotifyPropertyChanged { [DataMember] private Int32 x; [DataMember] private Int

我使用的类来自第三方,无法修改,我希望在winforms propertygrid中查看它们。 问题是网格不允许我扩展嵌套类。看起来像这样

第三方代码如下所示

[System.Xml.Serialization.XmlRoot("BBB")]
[DataContract]
public class B : INotifyPropertyChanged
{
    [DataMember]
    private Int32 x;
    [DataMember]
    private Int32 y;
    public Int32 X
    {
        get{return x; }
        set{ x = value;}
    }

    public Int32 Y
    {
        get { return y; }
        set { y = value;![enter image description here][1]}
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        RaisePropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    private void RaisePropertyChanged(object sender, PropertyChangedEventArgs arg)
    {
        if (PropertyChanged != null)
            PropertyChanged(sender, arg);
    }

    public override string ToString()
    {
        return string.Format("X {0} , Y {1}", x,y);
    }
}

[System.Xml.Serialization.XmlRoot("AAA")]
[DataContract]
public class A : INotifyPropertyChanged
{
    [DataMember]
    private Int32 i = 18;

    [DataMember]
    private Int32 j = 6;

    [DataMember]
    private B b;

    public Int32 I
    {
        get { return i; }
        set { i = value; }
    }

    public Int32 J
    {
        get { return j; }
        set { j = value; }
    }

    public B BB
    {
        get { return b; }
        set { b = value; }
    }

    public override string ToString()
    {
        return string.Format("I {0} , J {1} B {2}", i, j, b.ToString());
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string propertyName)
    {
        RaisePropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
    private void RaisePropertyChanged(object sender, PropertyChangedEventArgs arg)
    {
        if (PropertyChanged != null)
            PropertyChanged(sender, arg);
    }
}
我正在像这样初始化propertygrid

A aa = new A();
propertyGrid2.SelectedObject = aa;

首先,在创建基本
A
项时,还必须设置
BB
的值,否则它就是空的

A aa = new A();
aa.BB = new B();
propertyGrid2.SelectedObject = aa;
要浏览子项,请为这些项添加
ExpandableObjectConverter
。在您的
B
示例中,它如下所示:

TypeConverterAttribute BAttribute = new TypeConverterAttribute(typeof(ExpandableObjectConverter));
TypeDescriptor.AddAttributes(typeof(B), BAttribute);

首先,在创建基本
A
项时,还必须设置
BB
的值,否则它就是空的

A aa = new A();
aa.BB = new B();
propertyGrid2.SelectedObject = aa;
要浏览子项,请为这些项添加
ExpandableObjectConverter
。在您的
B
示例中,它如下所示:

TypeConverterAttribute BAttribute = new TypeConverterAttribute(typeof(ExpandableObjectConverter));
TypeDescriptor.AddAttributes(typeof(B), BAttribute);