afficher la liste des objets personnalisés en tant que liste déroulante dans le PropertyGrid

Je veux prendre un objet, disons que cet objet:

public class BenchmarkList
{
    public string ListName { get; set; }
    public IList<Benchmark> Benchmarks { get; set; }
}

et l'objet de l'affichage de son ListName comme le "nom" de la PropertiesGrid ("Benchmark" serait bien), et de la "valeur" de la partie de la grille de propriété, d'avoir une liste déroulante de la IList<> de Repères:

ici est la Référence de l'objet

public class Benchmark
{
    public int ID {get; set;}
    public string Name { get; set; }
    public Type Type { get; set; }
}

Je voudrais que la liste déroulante pour afficher le Nom de la propriété de l'indice de Référence de ce que les utilisateurs peuvent voir. Voici un exemple visuel:

afficher la liste des objets personnalisés en tant que liste déroulante dans le PropertyGrid

Donc, essentiellement, je suis en train d'essayer d'obtenir une collection de Référence des objets dans une liste déroulante, et ces objets doivent montrer leurs Nom de la propriété en tant que valeur dans la liste déroulante.

J'ai lu d'autres articles sur l'utilisation de la PropertiesGrid, y compris CETTE et CETTEmais ils sont plus complexes que ce que je suis en train de faire.

J'ai l'habitude de travailler sur le serveur-côté des choses, et ne pas traiter avec l'INTERFACE utilisateur via les Formulaires web ou WinForms, de sorte que cette PropertiesGrid est vraiment me prendre pour un tour...

Je ne sais que ma solution réside dans la mise en œuvre "ICustomTypeDescriptor", ce qui me permettra de dire la PropertiesGrid des valeurs qu'elle doit être l'affichage, indépendamment des propriétés de l'objet à qui je veux lier dans la liste déroulante, mais je ne suis pas sûr de savoir comment et où pour la mettre en œuvre.

Tous les pointeurs/aide serait grandement appréciée.

Grâce,
Mike

Mise à JOUR:

Ok, donc je vais changer les détails autour de un peu. J'allais à la mer avant avec les objets que j'ai pensé devraient être impliqués, donc voici ma nouvelle approche.

J'ai un objet appelé Analytique. C'est l'objet qui doit être liée à la PropertiesGrid. Maintenant, si j'expose une propriété qui est d'un type enum, PropertiesGrid prendra soin de la liste déroulante pour moi, ce qui est très agréable. Si j'expose une propriété qui est une collection d'un type personnalisé, PropertiesGrid n'est pas si agréable...

Voici le code pour l'analyse de l'objet que je désire lier à la PropertiesGrid:

public class Analytic
{ 
    public enum Period { Daily, Monthly, Quarterly, Yearly };
    public Analytic()
    {
        this.Benchmark = new List<IBenchmark>();
    }
    public List<IBenchmark> Benchmark { get; set; }
    public Period Periods { get; set; }
    public void AddBenchmark(IBenchmark benchmark)
    {
        if (!this.Benchmark.Contains(benchmark))
        {
            this.Benchmark.Add(benchmark);
        }
    }
}

Voici un court exemple de deux objets qui implémentent l'IBenchmark interface:

public class Vehicle : IBenchmark
{
    public Vehicle()
    {
        this.ID = "00000000-0000-0000-0000-000000000000";
        this.Type = this.GetType();
        this.Name = "Vehicle Name";
    }

    public string ID {get;set;}
    public Type Type {get;set;}
    public string Name {get;set;}
}

public class PrimaryBenchmark : IBenchmark
{
    public PrimaryBenchmark()
    {
        this.ID = "PrimaryBenchmark";
        this.Type = this.GetType();
        this.Name = "Primary Benchmark";
    }

    public string ID {get;set;}
    public Type Type {get;set;}
    public string Name {get;set;}
}

Ces deux objets seront ajoutés à l'analyse de l'objet de Référence de la Liste de la collecte dans les WinForms code:

private void Form1_Load(object sender, EventArgs e)
{
    Analytic analytic = new Analytic();
    analytic.AddBenchmark(new PrimaryBenchmark());
    analytic.AddBenchmark(new Vehicle());
    propertyGrid1.SelectedObject = analytic;
}

Voici un écran-prenez de la sortie dans la PropertiesGrid. Notez que la propriété exposée comme un enum obtient une belle liste déroulante avec pas de travail, mais la propriété exposée sous forme de Liste obtient une valeur de (la Collection). Lorsque vous cliquez sur (Collection), vous obtenez la Collection de l'éditeur et ne peut donc voir chaque objet, et de leurs propriétés respectives:

afficher la liste des objets personnalisés en tant que liste déroulante dans le PropertyGrid

Ce n'est pas ce que je cherche. Comme dans ma première capture d'écran dans ce post, je vais essayer de rendre la propriété de Référence de la collection de la Liste comme une liste déroulante qui affiche le nom de l'objet bien que le texte de ce qui peut être affiché...

Grâce

source d'informationauteur Michael McCarthy