c# - 查看 propertygrid 中的嵌套类

标签 c# winforms propertygrid

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

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);

关于c# - 查看 propertygrid 中的嵌套类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11672499/

相关文章:

c# - PropertyGrid 和对象的动态类型

c# - 无法在静态类上调用 GetType()

c# - 从字符串 C# 中返回值的一部分

c# - 选择多个单选按钮

c# - 如何使动态添加的按钮可点击

visual-studio - 如何在 Visual Studio IDE 的“属性”窗口中更改字体大小

java - 更改列名称 - Vaadin 7.8.4

c# - 生成随机唯一数字的性能问题

c# - MVC - 使用 RedirectToAction() 传递数据

visual-studio - F# VS2019 Windows 窗体