2012-07-26 44 views
2

我使用了第三方的類,我無法修改,我想查看它們在winforms屬性網格中。 問題是,網格不允許我擴展嵌套類。它看起來像這樣。查看propertygrid中的嵌套類

propertygrid

第三方代碼看起來是這樣的

[System.Xml.Serialization.XmlRoot("BBB")] 
[DataContract] 
public class B : INotifyPropertyChanged 
{ 
    [DataMember] 
    private Int32 x; 
    [DataMember] 
    private Int32 y; 
    public Int32 X 
    { 
     get{return x; } 
     set{ x = value;} 
    } 

    public Int32 Y 
    { 
     get { return y; } 
     set { y = value;![enter image description here][1]} 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void RaisePropertyChanged(string propertyName) 
    { 
     RaisePropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    private void RaisePropertyChanged(object sender, PropertyChangedEventArgs arg) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(sender, arg); 
    } 

    public override string ToString() 
    { 
     return string.Format("X {0} , Y {1}", x,y); 
    } 
} 

[System.Xml.Serialization.XmlRoot("AAA")] 
[DataContract] 
public class A : INotifyPropertyChanged 
{ 
    [DataMember] 
    private Int32 i = 18; 

    [DataMember] 
    private Int32 j = 6; 

    [DataMember] 
    private B b; 

    public Int32 I 
    { 
     get { return i; } 
     set { i = value; } 
    } 

    public Int32 J 
    { 
     get { return j; } 
     set { j = value; } 
    } 

    public B BB 
    { 
     get { return b; } 
     set { b = value; } 
    } 

    public override string ToString() 
    { 
     return string.Format("I {0} , J {1} B {2}", i, j, b.ToString()); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void RaisePropertyChanged(string propertyName) 
    { 
     RaisePropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 
    private void RaisePropertyChanged(object sender, PropertyChangedEventArgs arg) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(sender, arg); 
    } 
} 

我初始化這樣

A aa = new A(); 
propertyGrid2.SelectedObject = aa; 

回答

0

首先PropertyGrid中,當你創建基礎A項目也有設置值爲BB,否則它只是空值。

A aa = new A(); 
aa.BB = new B(); 
propertyGrid2.SelectedObject = aa; 

爲了瀏覽子項添加一個ExpandableObjectConverter這些項目。在你的B的例子中,它看起來像這樣:

TypeConverterAttribute BAttribute = new TypeConverterAttribute(typeof(ExpandableObjectConverter)); 
TypeDescriptor.AddAttributes(typeof(B), BAttribute);