Хорошо, я нашел решение для этого:
Вам нужен производный класс преобразователя со статической переменной списка объектов:
public class ListStringConverter: StringConverter
{
public static List<object> Objects = new List<object>();
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
return new StandardValuesCollection(Objects);
}
}
И добавьте атрибут TypeConverter-Attribute с вашим преобразователем впеременная selectedObject:
public class Foo
{
public Foo()
{
ObjectListStringConverter.Objects = new List<object>(){ new Bar("Bar0"), new Bar("Bar1"), new Bar("Bar2") };
}
[DisplayName(nameof(SelectedBar)),
Browsable(true),
TypeConverter(typeof(ObjectListStringConverter))]
public Bar SelectedBar { get; set; } = null;
}
public class Bar
{
public string Name;
public Bar(string name) { Name = name; }
public override string ToString()
{
return Name;
}
}
И в какой-то момент вам необходимо заполнить переменную статического списка объектов вашего класса-конвертера объектами, которые вы хотите иметь в своем списке, как я это сделал в Foo-Конструктор выше.
РЕДАКТИРОВАТЬ: В списке будет показано возвращаемое значение метода ToString () для каждого объекта, который вы добавили в список.