2

我有一个带有两个属性网格的表单。第一个网格的SelectedObject属性设置为包含该item对象。第二个设置为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 中它看起来不同?他们指向同一个对象吗?如何使网格 2Test在 Int32 集合编辑器中显示属性?

4

1 回答 1

0

在第一个窗口中,您正在显示一个对象,该对象具有一个名为 的成员Test,即集合;在第二个窗口中,您将显示集合本身 - 集合不知道名称。

Test不是集合名称;它是(访问时)返回集合的属性的名称。

在代码方面(仅用于说明,请注意 - 这里的真实内容都是PropertyDescriptor等等):

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

现在,这个对象有一个名为 的属性Test,给定“Test”,我们可以获得集合:

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

但是,从变量collection(实际上是从变量引用collection的对象)完全不可能得到字符串“Test”。事实上,在任何对象或一组对象上实际上可能有零个、一个或任意数量的属性,这些属性暴露了这个集合。

于 2013-08-30T11:46:44.710 回答