Выпадающий список .net PropertyGrid - возвращаемое значение, отличное от отображаемого значения

StackOverflow https://stackoverflow.com/questions/595140

Вопрос

Я хочу иметь возможность показывать в 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.Свойство экземпляра.

Надеюсь, это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top