我有一个带有两个属性网格的表单。将第一个网格的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中它看起来不同?它们指的是同一个物体,对吧?如何使网格2在Int32集合编辑器中显示Test属性?
发布于 2013-08-30 19:46:45
在第一个窗口中,您将显示一个具有名为Test的成员的对象,即集合;在第二个窗口中,您将显示集合本身-集合不知道名称。
Test is not集合的名称;它是(当被访问时)返回集合的属性的名称。
在代码方面(只是说明性的,注意-这里真正的东西都是PropertyDescriptor等):
var obj = new PropertyTest(); // the outer object现在,这个对象有一个名为Test的属性,给定"Test",我们就可以获得这个集合:
var collection = obj.Test; // at this point, we have all three然而,从变量collection (确实是从变量collection引用的对象)获取字符串“”是完全不可能的。实际上,在公开此集合的任何对象或对象集上实际上可以有零个、一个或任意数量的属性。
https://stackoverflow.com/questions/18531957
复制相似问题