.Net PropertyGrid DropDownList - retorno valor diferente de valor Show
-
09-09-2019 - |
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)
.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.