0

データ構造だけに使用される C# ライブラリ プロジェクトがあります。一部のクラスは次のSortedListように使用します。

SortedList<CustomItem1, CustomItem2> MySortedList;

PropertyGrid次に、を使用してデータ構造を編集する別の Windows フォーム プロジェクトを作成します。CollectionEditor;を除いて、すべてが編集に最適です。追加/削除ボタンは無効になっています。ICollection または IList の非ジェネリック バージョンを実装する必要があることは理解しています (それについてはさまざまな回答が見つかりました)。しかし、そうすると、 SortedList型に固有のメソッドのいくつかに依存するコードの多くが壊れてしまいます。 .

また、データ構造をできるだけ小さく保ち、可能であればライブラリが WinForms に依存しないようにしたいと考えています。

SortedList の CollectionEditor で [追加/削除] ボタンを有効にする方法に関するアイデア、関連する質問への参照、ヘルプ記事、例などを教えてください。

4

1 に答える 1

0

CollectionEditorクラスのMSDNドキュメントには次のように記載されています。

このエディターは、Itemプロパティを持つコレクションを編集できます。コレクションが存在する場合、エディターはItem プロパティからコレクションのタイプを判別できます。コレクションにこのプロパティがない場合、または複数のタイプのコレクションを提供する場合は、このクラスの特定の保護されたメンバーをオーバーライドして、他のタイプのコレクションをサポートするようにエディターをカスタマイズできます

さらに、コレクションエディタの例のドキュメントには次のように記載されています。

コレクションプロパティに強く型付けされたIList実装を使用し、コレクション内のすべてのオブジェクトが同じ型である場合、カスタムコレクションエディターは必要ありません。その場合、CollectionEditorはIList実装のItemsプロパティのタイプからオブジェクトタイプを推測するため、組み込みのCollectionEditorをプロパティエディターとして信頼できます。可能な限り、型付きコレクションを使用する必要があります。ただし、コントロールのコレクションプロパティのタイプとしてArrayListなどのコレクションを使用する場合は、コレクションアイテムのオブジェクトタイプを指定するためのカスタムコレクションエディターが必要です

したがって、CollectionEditorが(箱から出して)OrderedListで機能するとは思いません。

OrderedListコレクションをIListコレクションに投影してみましたか?

IList<CustomItem2> myList = mySortedList.Select(m => m.Value>).ToList();
// Or
IList<KeyValuePair<CustomItem1, CustomItem2>> myList = mySortedList.Select(m => m).ToList();
于 2013-03-11T17:47:00.360 に答える