Выпадающий список .net PropertyGrid - возвращаемое значение, отличное от отображаемого значения
-
09-09-2019 - |
Вопрос
Я хочу иметь возможность показывать в propertygrid выпадающий список, который показывает некоторое "строковое" значение, но возвращает значение "int".
Например, пусть установлено, что я получил этот класс :
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;
}
}
Вот мой класс, используемый в элементе управления propertygrid
public class MyObjectProperty
{
[TypeConverter(typeof(MyObjectOptions))]
public int Id
{
get { return this.id; }
set { this.id = value; }
}
}
Как вы можете видеть, я хочу сохранить идентификатор объекта, но я хочу показать его имя в выпадающем списке ...Я пытаюсь использовать хэш - таблицу , но это не работает ...
КСТАТИ - я использую версию 3.5 .Net, но я использую только WinForm (не WPF).
Решение
Вы не можете использовать GetStandardValues для этого.Этот метод был бы полезен, если бы вам пришлось ограничить свои целочисленные значения, скажем, 1, 5 и 10.
Если вы хотите отображать строки в значении вашего свойства, вам просто нужно переопределить методы ConvertTo и ConvertFrom вашего TypeConverter.PropertyGrid будет использовать преобразованные строки из выпадающего списка.
Что касается вашей хэш-таблицы, вы можете сохранить ее в своем TypeConverter, если ее содержимое статично.Если он динамический, лучше всего позволить целевому экземпляру сетки управлять им.Из вашего конвертера вы сможете получить к нему доступ через TypeDescriptorContext.Свойство экземпляра.
Надеюсь, это поможет.