Пользовательский TypeConverter с переменной StandardValues - PullRequest
6 голосов
/ 06 января 2011

У меня есть датагридвью с информацией о конкурентах. Я отображаю свойства каждого копметитора в PropertyGrid. Я хочу, чтобы некоторые из этих свойств (например, Степень, Город, Институт) были раскрывающимися списками со значениями, взятыми из базы данных. Для этой цели я могу создать собственный TypeConvertor, такой как этот

class DegreeTypeConverter : StringConverter
{
  static string[] _valueList = { "Bachelor", "Master", "Student" }; 

  public override bool GetStandardValuesSupported(
     ITypeDescriptorContext context)
  {
     return true;
  }

  public override bool GetStandardValuesExclusive(
     ITypeDescriptorContext context)
  {
     return true;
  }


  public override StandardValuesCollection GetStandardValues(
     ITypeDescriptorContext context)
  {
     return new StandardValuesCollection(_valueList);
  }
}

[TypeConverter(typeof(DegreeTypeConverter))]
  public string Degree
  {
     get { return _degree; }
     set { _degree = value; }
  }

Но я хочу получить этот valueList из базы данных, и у меня есть 14 таких свойств, поэтому какой-то универсальный конвертер будет намного лучше, чем 14 конвертеров с единственным отличием: valueList. Можно ли создать TypeConverter с переменной valueList (например, передать в TypeConverter в качестве параметра в конструкторе)? Или, может быть, есть другой способ иметь в PropertyGrid раскрывающийся список со списком значений переменных? Надеюсь, это было достаточно ясно Спасибо заранее

1 Ответ

6 голосов
/ 06 января 2011

В методе GetStandardValues ​​вам предоставляется контекст. Используйте context.Instance для доступа к объекту, который содержит ваше свойство. Затем опросите его, чтобы получить поставщика услуг, который предоставит вам услуги БД. Это может быть через ваш собственный API или вы можете получить из IServiceProvider и реализовать GetService, или почему бы не получить его через ваш контейнер IOC как одиночный файл?

...