2011-04-23 18 views
11

Por el momento tengo un objeto de tipo A que está siendo visto por PropertyGrid. Sin embargo, una de sus propiedades es de tipo B. La propiedad que es de tipo B no es ampliable. ¿Cómo puedo cambiar esto para que:¿Cómo veo las propiedades del objeto en PropertyGrid?

a) Puedo ampliar la propiedad objeto personalizado b) Esos cambios están ligados a esa propiedad

Aquí está el código que tengo hasta ahora:

using System; 
using System.Windows.Forms; 
using System.ComponentModel; 

namespace PropGridTest 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      A a = new A 
      { 
       Foo = "WOO HOO!", 
       Bar = 10, 
       BooFar = new B 
       { 
        FooBar = "HOO WOO!", 
        BarFoo = 100 
       } 
      }; 

      propertyGrid1.SelectedObject = a; 
     } 
    } 
    public class A 
    { 
     public string Foo { get; set; } 
     public int Bar { get; set; } 
     public B BooFar { get; set; } 
    } 
    public class B 
    { 
     public string FooBar { get; set; } 
     public int BarFoo { get; set; } 
    } 
} 

Respuesta

21

Puede usar la clase ExpandableObjectConverter para este propósito.

Esta clase añade soporte para propiedades sobre un objeto a los métodos y propiedades proporcionadas por TypeConverter. para hacer un tipo de propiedad expandible en el PropertyGrid, especifique este TypeConverter para implementaciones estándar de GetPropertiesSupported y GetProperties.

Para utilizar este convertidor, decorar la propiedad en cuestión con el TypeConverterAttribute, con typeof(ExpandableObjectConverter) como el constructor de la discusión.

public class A 
{ 
    public string Foo { get; set; } 
    public int Bar { get; set; } 

    [TypeConverter(typeof(ExpandableObjectConverter))] 
    public B BooFar { get; set; } 
} 
+0

¡Gracias! Funciona exactamente como lo necesitaba. No puedo marcar su respuesta como correcta durante 8 minutos más o menos ... pero lo haré: D –

+0

Oh Genial, eso era exactamente lo que necesitaba y buscaba una hora. – Titwan

Cuestiones relacionadas