Pergunta

Eu quero ser capaz de mostrar em um PropertyGrid um dropdownlist que mostrar algum valor "string" mas retornar um valor de "int".

Por exemplo, deixar o jogo eu tenho essa 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;
    }
}

Aqui está o meu uso classe no controle PropertyGrid

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

Como você pode ver, eu quero armazenar o id do objeto, mas eu quero mostrá-la de nome no dropdownlist ... Eu tento usar um hashtable mas é não funciona ...

BTW - eu uso a versão 3.5 do Net, mas eu só uso WinForm (não WPF)

.
Foi útil?

Solução

Você não pode usar GetStandardValues ??para isso. Este método seria útil se você tivesse que restringir seus valores inteiros para digamos 1, 5 e 10.

Se você quer mostrar cordas em seu valor de propriedade, você só precisa substituir o ConvertTo e métodos ConvertFrom do seu TypeConverter. O PropertyGrid vai usar as cordas convertidos na lista suspensa.

Sobre o seu hashtable, você pode armazená-lo em seu TypeConverter se o seu conteúdo é estático. Se é dinâmico, o melhor é deixar que a instância de destino da rede de gerenciá-lo. A partir do seu conversor, você será capaz de acessá-lo através da propriedade TypeDescriptorContext.Instance.

Espero que ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top