如何从ComboBox获取通用类型的项目

时间:2018-11-06 13:21:36

标签: c# wpf combobox

我认为这将是一件微不足道的任务,但并不是所有的事情都那么简单。问题是用户可以通过两种方式将项目插入ComboBox中:

  1. 只需输入文本
  2. 通过从剪贴板粘贴数据(通过按钮)。

首先,我有这种扩展方法:

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个集合,但是...如果通过剪贴板插入了项目该怎么办? :)这样可以清除所有粘贴的项目吗? :) 我想念什么吗?有解决方案吗?

1 个答案:

答案 0 :(得分:0)

修复combobox1.Items.Add()功能。将combobox1.Items.Add(combobox.Text);更改为combobox1.Items.Add(new ComboBoxItem(){Content=combobox1.Text});

这就是您要做的一切。