重要的两点:
1.指定转换器;
2.属性赋值;
public class School
{
[DisplayName("地址")]
public string Address{set;get;}
[DisplayName("姓名")]
public string Name{set;get;}
[DisplayName("性别")]
public string Sex{set;get;}
public override string ToString()
{
return Address+Name+Sex;
}
}
public class SystemConfig
{
[DisplayName("名称"), Category("地址")]
public string ConfigName { set; get; } = "A";
private School _School = new School();
[TypeConverter(typeof(ExpandableObjectConverter)),DisplayName("学校")]
public School MySchool1
{
set { _School = value; }
get { return _School; }
}
public override string ToString()
{
return ConfigName + MySchool1;
}
}
public class Attributes
{
[Category("学生")]
public string Ages { get; set; }
private SystemConfig _config = new SystemConfig();
[TypeConverter(typeof(ExpandableObjectConverter)), Category("其他"),DisplayName("配置")]
public SystemConfig Config
{
set { _config = value; }
get { return _config; }
}
}
1. 重写 ToString() 是为了在标题后面显示,如下图中配置后面的A;
2. 指定转换器说的是 [TypeConverter(typeof(ExpandableObjectConverter)),DisplayName("学校")]中的TypeConverter特性,ExpandableObjectConverter是内置的转换器,可以直接用,或者自定义子类,可参考http://t.csdnimg.cn/EaLO4
3.属性赋值说的是private SystemConfig _config = new SystemConfig();就是直接给字段默认值,要不然嵌套对象里面属性没有值,是不会显示嵌套的,比如private School _School = new School();改为private School _School;