Как я могу отменить выбор элемента в ListView?

У меня есть ListView с несколькими элементами в нем. Когда ListView теряет фокус, последний выбранный ListViewItem по-прежнему «выбран» с серым фоном.
Я хотел бы добиться этого в ListView.FocusLost, выбор не будет, и поэтому произойдет событие ListView.SelectedIndexChanged.
Есть идеи?

Я использую .NET CF 3.5.

Предположим, что вы обращаетесь к ListView из родительской формы / элемента управления.

Вы можете добавить этот fragment кода в событие конструктора / загрузки формы / элемента управления:

this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear(); 

Итак, в вашем случае вы замените этого делегата:

 if (this.myListView.SelectedIndices.Count > 0) for (int i = 0; i < this.myListView.SelectedIndices.Count; i++) { this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false; } 

Вы можете дать код более приятной форме, кстати.

 myListView.SelectedItems.Clear(); 

Я знаю, что это поздно, но если кому-то понадобится решение, которое я хотел бы добавить к решению.

Вам необходимо установить для свойства Focused значение false, чтобы избежать выделения выделенных элементов с фокусом.

 for (int i = 0; i < this.myListView.SelectedIndices.Count; i++) { this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false; this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false; } 

это проще.

 this.myListView.SelectedIndex = -1; this.myListView.Update(); 

Еще один эффективный способ приблизиться к этому:

 foreach (ListViewItem i in myListView.SelectedItems) { i.Selected = false; } 

Если вы используете EditItemTemplate, а не ItemTemplate, возможно, вы пытались выяснить, почему ListView1.SelectedIndex = -1; не работает. Это потому, что вам нужно использовать ListView1.EditIndex = -1;

 if (listView1.SelectedItems.Count > 0) for (int i = 0; i < listView1.SelectedItems.Count; i++) { listView1.SelectedItems[i].Selected = false; }