то работает как-то неадекватно. При переключении элементов, срабатывает два раза подряд и выдаёт сначала 0, потом 1.
А если выделить сразу несколько элементов кучей, выдаёт
0
1
2
3
4
....
и т.д., сколько элементов было выделено.
Ещё есть такое событие:
Работает как задумано. У элемента с которого фокус уходит меняется состояние, он становится невыбранным. У элемента, на который приходит фокус, меняется состояение, он становится выбранным.
you can utilize the Dispatcher class in WPF. The Dispatcher provides a way to schedule the execution of code on the UI thread, allowing you to defer the execution of your code until after all the selection events have been processed.
The DispatcherPriority.ApplicationIdle parameter ensures that the code is executed when the application is idle and all pending UI events, including selection events, have been processed.
By using the Dispatcher class, you can defer the execution of your code until after all the selection events have been fired, effectively reacting to the last event instead of the first event.
In Windows Forms, you can achieve a similar approach without using a timer by utilizing the Application.Idle event. The Application.Idle event is raised when the message queue is empty and the application is idle. Here’s an example of how you can implement it:
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
Application.Idle += Application_Idle;
// Тут надо подумать происходит добавление один или несколько раз
}
private void Application_Idle(object sender, EventArgs e)
{
Application.Idle -= Application_Idle;
// Your code logic here
// This will execute after all the selection events have been processed
}