Я написал универсальный класс, который хранится в списке элементов комбинированного списка, используя ключ / значение для идентификатора базы данных и его значения метки строки.Таким образом, выбирая индекс, я получаю его первичный ключ БД и метку строки для визуальных целей.Проблема в том, что я перезаписываю поле со списком, чтобы выполнить расширенный поиск «Предложить / добавить», используя подстроки, а не просто искать «StartsWith», как это делает поле со списком по умолчанию в C # / .NET.
Проблема заключается в использованииlinq (подкласс компонента ComboBox):
private Expression<Func<ObjectCollection, IEnumerable<string>>> _propertySelector
_suggBindingList.Clear();
_suggBindingList.RaiseListChangedEvents = false;
_propertySelectorCompiled(Items) //Items is ObjectCollection <-- crashes
.Where(_filterRuleCompiled)
.OrderBy(_suggestListOrderRuleCompiled)
.ToList()
.ForEach(_suggBindingList.Add);
_suggBindingList.RaiseListChangedEvents = true;
_suggBindingList.ResetBindings();
Простое решение состоит в том, чтобы просто вместо этого вручную циклически проходить по элементам и вручную приводить / преобразовывать, но я надеялся, что был более простой способ разрешить мой комбинированный список DataItemпользовательский класс, который должен быть приведен к строке во время выполнения ... поэтому приведенный выше код будет нормально работать с обычными данными поля со списком или с парой ключ / значение настраиваемого элемента поля со списком, который я добавил. ToString () класса просто используетметка для представления себя в виде строки, которая, как я предполагал, будет охватывать это, но я не думаю.
Есть предложения?