PropertyGrid编辑器,用于包含继承类的属性列表

时间:2013-08-02 12:51:10

标签: c# propertygrid propertyeditor

我正在寻找一个属性编辑器的例子:

public class ContainerClass
{
  public string ContainerName { get; set; }
  public List<ContainerBase> Containers { get; set; }

  public ContainerClasss()
  {
    Containers = new List<ContainerBase>();
  }
}

public class ContainerBase
{
  public string Name { get; set; }
  public string Description { get; set; }
  public string Material { get; set; }
  public float Area { get; set; }
}

public class Bookbag : ContainerBase
{
  public int Pockets { get; set; }

  public Bookbag()
  {
    Description = "Bookbag";
  }
}

public class Bookcase : ContainerBase
{
  public Color Color { get; set; }
  public int Shelves { get; set; }

  public Bookcase()
  {
    Description = "Bookcase";
  }   
}

当我点击容器的[...]按钮时,[ADD]按钮允许我添加不同类型的容器,而不是基本容器类......

1 个答案:

答案 0 :(得分:4)

您可以使用自定义UITypeEditor属性执行此操作:

public class ContainerClass
{
    ...
    [Editor(typeof(MyCollectionEditor), typeof(UITypeEditor))]
    public List<ContainerBase> Containers { get; set; }
    ...
}

使用此UITypeEditor:

public sealed class MyCollectionEditor : CollectionEditor // need a reference to System.Design.dll
{
    public MyCollectionEditor(Type type)
        : base(type)
    {
    }

    protected override Type[] CreateNewItemTypes()
    {
        return new[] { typeof(ContainerBase), typeof(Bookbag), typeof(Bookcase) };
    }
}

这就是它的样子:

enter image description here