[英]How to get items of generic type from ComboBox
我以为这将是一件微不足道的任务,但并不是那么简单。 问题是用户可以通过两种方式将项目插入ComboBox
:
首先,我有这种扩展方法:
internal static IEnumerable<T> GetItems<T>(this ComboBox comboBox)
{
return comboBox.Items.Cast<T>();
}
和用法:
var items = comboBox.GetItems<string>();
这不适用于手动键入的文本,因为该文本不属于Items
集合-因此我得到了空列表。 我想到的一个技巧是在返回之前将此文本插入Items
集合中:
internal static IEnumerable<T> GetItems<T>(this ComboBox comboBox)
{
if (!comboBox.HasItems)
{
comboBox.Items.Add(comboBox.Text);
}
return comboBox.Items.Cast<T>();
}
但是,这里出现了一个问题:用户可以键入另一个文本,然后我们有两个项目,因为插入了先前的文本! 我们可以在继续操作之前清除Items
集合,但是...如果项目是通过剪贴板插入的,该怎么办? :)这样可以清除所有粘贴的项目吗? :)我想念什么吗? 有解决方案吗?
修复combobox1.Items.Add()
函数。 更改combobox1.Items.Add(combobox.Text);
到combobox1.Items.Add(new ComboBoxItem(){Content=combobox1.Text});
那就是你要做的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.