Невозможно привести объект типа 'System.String' к исключению "..Controls.SurfaceListBoxItem" - PullRequest
2 голосов
/ 22 июля 2010

Все, что я пытаюсь сделать, это сравнить, для каждого значения в списке, его значение с выбранным, а затем установить индекс соответствия как выбранный. По какой-то причине исключение в названии поднято. Хотя я не понимаю почему. Код:

            foreach(SurfaceListBoxItem n in BackgroundsList.Items)
        {
            if (n.ToString() == current) BackgroundsList.SelectedItem = n;
        }

Спасибо! * * 1004

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Оператор C # foreach выполняет для вас неявное приведение типа элемента, возвращаемого Items, к указанному типу SurfaceListBoxItem. Во время выполнения возвращенное значение string не может быть преобразовано в SurfaceListBoxItem. Вы можете решить эту проблему, используя var вместо SurfaceListBoxItem

foreach(var n in BackgroundsList.Items)
{
    if (n.ToString() == current) BackgroundsList.SelectedItem = n;
}

Или, конечно, вы можете использовать LINQ:

BackgroundsList.SelectedItem = (
    from n in BackgroundList.Items
    where n.ToString() == current
    select n).FirstOrDefault();
2 голосов
/ 22 июля 2010

В WPF List.Items не обязательно содержит коллекцию ListBoxItem, вместо этого он содержит только значения данных, и контейнер элементов данных выводится, чтобы установить значение, вы должны просто установить текущий выбранный элемент.

Нет необходимости повторять, вы можете просто выполнить следующее,

BackgroundsList.SelectedItem = current;
...