2013-08-30 46 views
2

我有一個具有兩個屬性網格的窗體。 第一個網格的SelectedObject屬性設置爲包含item對象。第二個設置爲item.Test;使用PropertyGrid

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; } 
    } 
} 

enter image description here 這裏怎麼UI看起來像:

我的問題是,從電網1,爲什麼是Test屬性顯示在Int32集合編輯器中,而在網格2中顯示不同?他們指着同一個對象嗎?如何使網格2在Int32集合編輯器中顯示Test屬性?

回答

0

在第一個窗口,正在顯示的對象具有成員稱爲Test,即集合;在第二個窗口中顯示集合本身 - 集合不知道名稱。

Test不是集合的名稱;它是(訪問時)返回集合的屬性名稱。

在代碼方面(只說明,注意事項 - 在這裏真正的東西是所有PropertyDescriptor等):

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

現在,這個對象有一個名爲Test財產,並給予「測試」,我們可以得到集合:

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

但是,從可變collection(實際上從由可變collection引用對象)它是完全不可能得到字符串「測試」。實際上,任何對象或暴露此集合的對象集合中實際上都可能有零個,一個或任何數量的屬性。

+0

感謝您的解釋。如果我希望網格2顯示屬性Test的內容(如Int32集合編輯器中顯示的內容),那我該怎麼做?可能嗎? – yonan2236