WPF Удаление элемента из списка - PullRequest
1 голос
/ 04 апреля 2011

У меня есть список в WPF, который привязан к ObservableCollection с использованием свойства ItemSource. Это отлично работает, правильные элементы отображаются.

В списке (который содержит список имен изображений) имеется обработчик события события SelectionChanged, который обновляет источник элемента управления изображением путем к пути к выбранному изображению (фактически давая предварительный просмотр изображения).

У меня есть следующий код для удаления элемента из списка, в случае нажатия кнопки:

if (lstLocal.SelectedIndex > -1)
{
    localImages.RemoveAt(lstLocal.SelectedIndex);
}

localImages - ObservableCollection, а lstLocal - ListBox.

Однако, когда я удаляю выбранный элемент, это вызывает событие SelectionChanged. Мой обработчик события SelectionChanged использует свойство SelectedIndex в списке. Я получаю исключение Index was out of range. Must be non-negative and less than the size of the collection., так что я предполагаю, что удаление элемента приводит к тому, что для SelectedIndex устанавливается значение, подобное нулю (или отрицательному числу)?

Есть ли способ обойти эту проблему? Я предполагаю, что есть лучший способ удалить элементы, или мне нужна какая-то проверка моего обработчика SelectionChanged?

Ответы [ 2 ]

1 голос
/ 05 апреля 2011

Ах, классическое раздражение элемента управления ListBox.Изменяя связанную коллекцию, она может отменить выбор и сбросить позицию прокрутки к вершине.Это действительно раздражает, когда вам приходится выбирать элементы из списка и редактировать их по частям как часть рабочего процесса.

При изменении списка вы можете сохранить ссылку на объект «текущий выбранный элемент», чтобы вы могли сохранитьвыбор, если что-то меняется за кулисами.Затем вы также можете убедиться, что, если он существует, он остается в поле зрения, прокрутив обратно к этому элементу с помощью метода ScrollIntoView.

SelectedIndex, равный -1, означает, что ничего не выбрано, как вы уже помнили.Это древняя задержка до-NET, до того, как существовало свойство SelectedItem.В настоящее время SelectedItem будет иметь значение null одновременно с SelectedIndex, равным -1.

1 голос
/ 04 апреля 2011

Оберните код в свой обработчик SelectionChanged в

if (lstLocal.SelectedItem != null)
{
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...