2010-12-20 13 views
0

CollectionEditorで作成された新しいオブジェクトを特定の参照で初期化する必要があります。特定の参照を持つ.NET CollectionEditorでオブジェクトが初期化される

具体的には、私はPropertyGridで編集可能なオブジェクトPipelineを持っています。このオブジェクトには、マーカーのコレクションが含まれています。マーカーは、いくつかの計算を行うためにPipelineへの参照を必要とします。

現在、PipelineのPropertyGridにはマーカーのエントリがあります。楕円ボタンをクリックすると、CollectionEditorが表示されます。プロパティの編集はうまくいきますが、作成した新しいマーカーに対しても現在のパイプラインを設定する必要があります。私はそれを行う最善の方法がわからない。監視できるイベントはありますか?カスタムのCollectionEditorを作成する必要がありますか(ただし、特定のPipelineについてどのように知っていますか?)

答えて

1

カスタムのCollectionEditorとカスタムのPropertyDescriptorクラスを作成する必要があります。 PropertyDescriptorは、PropertyDescriptor.GetEditorをオーバーライドしてコレクションエディタに渡すPipeLineオブジェクトを格納できます。 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; 
} 
+0

がどのようにのPropertyDescriptorを割り当ててください:

ここであなたが始めるためにいくつかのコードがありますか?私が割り当てることができる属性はありますか?またはCustomDesignerが必要ですか? – doobop

+0

MyPropertyDescriptorオブジェクトは、ICustomTypeDescriptorのGetPropertiesメソッドの実装に割り当てます。私は私の答えにいくつかのコードを追加しました。 – Peladao

関連する問題