2

2 つのプロパティ グリッドを持つフォームがあります。SelectedObject最初のグリッドのプロパティは、itemオブジェクトを含むように設定されています。そして2番目のものはに設定されていitem.Testます;

public MainForm()
{
    InitializeComponent();

    Item item = new Item();
    propertyGrid1.SelectedObject = item;
    propertyGrid2.SelectedObject = item.Test;
}

これはItemクラスの構造です:

public class Item
{
    List<int> _test = new List<int>();

    public List<int> Test
    {
        get { return _test; }
        set { _test = value; }
    }
}

ここに画像の説明を入力 UI は次のようになります。

私の質問は、グリッド 1 から、Testプロパティが Int32 コレクション エディターに表示されているのに、グリッド 2 では異なるように見えるのはなぜですか? 彼らは同じオブジェクトを指していますよね?TestInt32 コレクション エディターでプロパティを表示するグリッド 2 を作成するにはどうすればよいですか?

4

1 に答える 1

0

最初のウィンドウには、コレクションであるというメンバーを持つオブジェクトが表示されています。2 番目のウィンドウで、コレクション自体を表示します。コレクションは名前を知りません。Test

Testコレクションの名前ではありません。これは、(アクセスされたときに)コレクションを返すプロパティの名前です。

コードの用語 (説明のみ、注意 - ここにある実際のものはすべてPropertyDescriptorなど):

var obj = new PropertyTest(); // the outer object

このオブジェクトには というプロパティがあり、Test"Test" を指定すると、コレクションを取得できます。

var collection = obj.Test; // at this point, we have all three

ただし、変数から(実際には変数によって参照collectionされるオブジェクトから)文字列 "Test" を取得することは完全に不可能です。実際、このコレクションを公開するオブジェクトまたはオブジェクトのセットには、実際にはゼロ、1、または任意の数のプロパティが存在する可能性があります。collection

于 2013-08-30T11:46:44.710 に答える