【发布时间】:2019-03-01 19:01:31
【问题描述】:
我编写了一个通用类,它存储在组合框项目列表中,使用数据库标识符的键/值及其字符串标签值。通过这种方式选择一个索引,我得到它的数据库主键和一个用于视觉目的的字符串标签。问题是,我正在覆盖组合框以使用子字符串进行增强的建议/追加搜索,而不仅仅是像 C#/.NET 中的默认组合框那样搜索“StartsWith”。
问题在于使用 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() 仅使用标签将自身表示为字符串,我认为这会涵盖这一点,但是我猜不是。
有什么建议吗?
【问题讨论】:
-
此外,通过将静态方法添加到特定类但不确定对于像字符串这样的原始类型,在类和对象之间进行显式转换是有意义的。