您需要创建一个自定义 CollectionEditor 以及一个自定义 PropertyDescriptor 类。您的 PropertyDescriptor 可以存储一个 PipeLine 对象,该对象通过覆盖 PropertyDescriptor.GetEditor 传递给您的集合编辑器。您可以让 PipeLine 创建新的 Markers 对象并进行任何所需的初始化。
以下是一些帮助您入门的代码:
public class MyCollectionEditor : System.ComponentModel.Design.CollectionEditor
{
private Pipeline _pipeline;
public MyCollectionEditor(Type type) : base(type) {}
public MyCollectionEditor(Type type, Pipeline pipeline) : base(type)
{
_pipeline = pipeline;
}
protected override object CreateInstance(Type itemType)
{
return _pipeline.CreateNewMarker();
}
}
public class MyPropertyDescriptor : PropertyDescriptor
{
private PipeLine _pipeline;
public MyPropertyDescriptor(PipeLine pipeline) : base(name, null)
{
_pipeline = pipeline;
}
public override object GetEditor(Type editorBaseType)
{
return new MyCollectionEditor(typeof(MarkerCollection), _pipeline);
}
// ... other overrides ...
}
// ...
// Implement System.ComponentModel.ICustomTypeDescriptor.GetProperties
public System.ComponentModel.PropertyDescriptorCollection GetProperties()
{
PropertyDescriptorCollection pdc = new PropertyDescriptorCollection(null);
foreach (Marker m in Markers) {
MyPropertyDescriptor pd = new MyPropertyDescriptor(m);
pdc.Add(pd);
}
return pdc;
}