Как получить предметы универсального типа из ComboBox - PullRequest
0 голосов
/ 06 ноября 2018

Я думал, что это будет тривиальная задача, но не все так просто. Дело в том, что пользователь может вставить элемент (ы) в 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 голосов
/ 06 ноября 2018

Fix combobox1.Items.Add() функция. Изменить combobox1.Items.Add(combobox.Text); на combobox1.Items.Add(new ComboBoxItem(){Content=combobox1.Text});

Это все, что тебе нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...