ListView ItemSelectionChanged срабатывает дважды?

У меня есть приложение Winforms в C# с элементом управления ListView. Этот ListView показывает список дел, и я использую событие ItemSelectionChanged для обработки обновлений.

проблема в том, что событие "ItemSelectionChanged" срабатывает дважды каждый раз, когда я пытаюсь сделать обновление.

событие ItemSelectionChanged обновляет форму для представления обновлений (т. е. удаляет элемент из списка).

есть ли способ отключить событие от запуска после освежиться?

обновление 1:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
    {   
        if (e.IsSelected)
        {                
            listView1.Items[e.ItemIndex].Remove();

            listView1.SelectedIndices.Clear();
            listView1.Focus();

            listView1.Update();
        }
        else
        {

        }

    }

4 ответов


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

    private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
        if (e.IsSelected) {
            // Update form
            //...
        }
    }

да просто удалите EventHandler в начале обновления и добавьте его снова после завершения обновления

Я.е

// Remove handler
listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged);

// Do refresh

// Add again
listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged);

Я думаю, вам нужно вручную отменить выбор элемента в конце вашего обработчика.

мыши listview1.SelectedItem = null;


попробуйте это:

private void ItemSelect()
{

        if(SelectedItem!=null)
            App.Current.MainPage.Navigation.PushAsync(new Pages.TLAccByCurrency(), true);
        _selectedItem = null;
}