Как я могу отменить выбор элемента в ListView? - PullRequest
10 голосов
/ 17 августа 2011

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

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

Ответы [ 8 ]

19 голосов
/ 17 августа 2011

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

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

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

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

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;
    }

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

5 голосов
/ 11 октября 2015
myListView.SelectedItems.Clear();
2 голосов
/ 06 января 2016

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

Вам необходимо установить для свойства 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;
}
1 голос
/ 08 июля 2014

Другой эффективный способ подойти к этому:

foreach (ListViewItem i in myListView.SelectedItems)
{
    i.Selected = false;
}
1 голос
/ 10 сентября 2011

это проще.

this.myListView.SelectedIndex = -1;
this.myListView.Update();
0 голосов
/ 20 февраля 2019

Вы можете попробовать это:

MyList.ItemSelected += (sender, e) => {
    ((ListView)sender).SelectedItem = null;
};

или если у вас есть OnSelection, созданный в вашем коде View позади (xaml.cs):

 private void OnSelection(object sender, SelectedItemChangedEventArgs e)
        {
           ((ListView)sender).SelectedItem = null;
        }

Привет

0 голосов
/ 08 августа 2017

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

0 голосов
/ 13 ноября 2016
if (listView1.SelectedItems.Count > 0)
    for (int i = 0; i < listView1.SelectedItems.Count; i++)
    {
        listView1.SelectedItems[i].Selected = false;
    }
...