Индекс ListView равен -1 перед его очисткой - PullRequest
1 голос
/ 23 февраля 2020

В моем приложении WPF у меня есть ListView с функцией, выполняющейся при изменении выбора. После получения индекса выбранного элемента, я хочу очистить выбор. Но если я сделаю это, index всегда будет -1, а не индексом выбранного элемента.

Этот код работает:

        private void ListViewItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            var index = ListViewItems.SelectedIndex;
            Note note = MainWindow.dBConnector.NotesList[index];
            ShowNote(note);
        }

Но когда я пытаюсь сбросить выбор в любое время позже индекс выходит за пределы диапазона (устанавливается на -1)

        private void ListViewItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            //index is somehow here already -1
            var index = ListViewItems.SelectedIndex;

            //This causes a System.ArgumentOutOfRangeException (because there is no item at -1)
            Note note = MainWindow.dBConnector.NotesList[index];
            ShowNote(note);

            //This causes the error
            ListViewItems.SelectedIndex = -1;
        }

Я пробовал разные методы для сброса выбора, ничего не меняется. Я даже попытался сбросить выделение на более позднем этапе программы, но ничего не изменилось, индекс всегда равен -1.

Почему это происходит и как я могу решить эту проблему?

1 Ответ

2 голосов
/ 23 февраля 2020

Обычно, когда вы изменяете свой индекс на -1, он также запускает ваше событие с измененным выбором, тогда ваш индекс становится -1

в вашем событии с измененным выбором, вы должны проверить, не равен ли индекс -1, т.е.

private void ListViewItems_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if(ListViewItems.SelectedIndex != -1)
    {
        var index = ListViewItems.SelectedIndex;
        Note note = MainWindow.dBConnector.NotesList[index];
        ShowNote(note);

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