Domanda

Voglio essere in grado di mostrare in un propertygrid una dropdownlist che mostra alcuni "stringa" valore, ma restituisce un valore di tipo int.

Consideriamo, ad esempio, ho avuto questa classe :

public class MyObjectOptions : StringConverter
{
    public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
    {
        return true;
    }

    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
        MyObjectCollection mm = new MyObjectCollection();

        List<String> names = new List<String>
        foreach (MyObject m in mm)
        {
            m.Id // Need to store this somewhere ...
            names.Add(m.Name);
        }

        return new StandardValuesCollection(name);
    }

    public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
    {
        return true;
    }
}

Ecco la mia classe di uso del controllo propertygrid

public class MyObjectProperty
{
    [TypeConverter(typeof(MyObjectOptions))]
    public int Id
    {
        get { return this.id; }
        set { this.id = value; }
    }
}

Come si può vedere, voglio memorizzare l'id dell'oggetto, ma voglio mostrare il nome del dropdownlist ...Io cerco di usare una tabella hash, ma non funziona ...

BTW - io uso la versione 3.5 del .Net, ma io uso solo WinForm (non WPF).

È stato utile?

Soluzione

Non si possono usare GetStandardValues per che.Questo metodo è utile se si doveva limitare i tuoi valori interi da 1, 5 e 10.

Se si desidera visualizzare stringhe del valore della proprietà, basta sovrascrivere il ConvertTo e ConvertFrom metodi TypeConverter.Il PropertyGrid utilizzare la convertiti in stringhe nell'elenco a discesa.

Circa il hashtable, è possibile memorizzare nel vostro TypeConverter se il suo contenuto è statico.Se è dinamico, la cosa migliore è lasciare che l'istanza di destinazione della griglia di gestione.Dal tuo strumento, e si sarà in grado di accedervi attraverso il TypeDescriptorContext.Proprietà di istanza.

Speranza che aiuta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top