Объект сетки свойств не работает при выборе поля со списком, но все в порядке при прокрутке поля со списком или двойном щелчке мыши
-
02-07-2019 - |
Вопрос
У меня есть сетка свойств на C#, загружающая объект PropertyAdapter (базовая оболочка одного из моих объектов, отображающая соответствующие свойства с соответствующими тегами).
У меня есть TypeConverter для одного из свойств (DataType, который возвращает перечисление возможных значений), поскольку я хочу ограничить значения, доступные в сетке свойств, десятичными и целыми числами, используя следующие два метода:
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(new List<Constants.DataTypes>() { Constants.DataTypes.Decimal, Constants.DataTypes.Integer });
}
В сетке свойств оно отображается так, как я хочу, и когда я дважды щелкаю поле свойства в сетке свойств, оно успешно переключается между целым и десятичным числом.Аналогичным образом я могу использовать колесо мыши для прокрутки параметров в поле со списком поля свойств.
Однако если я использую поле свойства в качестве поля со списком и выбираю значение из раскрывающегося списка, я получаю стандартное окно ошибки сетки свойств с ошибкой:
Объект типа 'System.string' не может быть преобразован в тип 'pelion.pm3.utils.constants+dataTypes'.
Я предполагаю, что могу использовать переопределения преобразователя в преобразователе типов, чтобы перехватить их и преобразовать в перечисление типов данных, но почему сетка свойств не работает, когда я выбираю из раскрывающегося списка вместо двойного щелчка или «вращения мыши» по падать?
Решение
При выборе из раскрывающегося списка значение возвращается в виде строки.Я не уверен, почему это так, но я видел это раньше.Я думаю, что двойной щелчок или прокрутка колесика мыши меняют значения из коллекции значений, а выбор из раскрывающегося списка аналогичен редактированию значения поля в виде строки.Затем вам нужно преобразовать значение из строки в значение перечисления.