Существует ли что-то вроде события AfterSelectionChanged для ListView? - PullRequest
0 голосов
/ 31 октября 2011

У меня есть список элементов в ListView, и мне нужно что-то вроде события AfterSelectionChanged. Теперь я подписан на ItemSelectionChanged, но он срабатывает N раз, если я нажимаю Ctrl + A в списке с N элементами. Но я должен быть уведомлен только один раз после того, как будут выбраны все элементы.

Спасибо.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вы можете сделать свой собственный, отложив вызов метода, пока все события ItemSelectionChanged не перестанут срабатывать. Что очень аккуратно сделано с помощью Control.BeginInvoke (). Сделайте так, чтобы это выглядело примерно так:

    List<int> afterSelect = new List<int>();

    private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {            
        if (afterSelect.Count == 0) this.BeginInvoke(new Action(() => listView1_AfterSelectionChanged()));
        afterSelect.Add(e.ItemIndex);
    }

    private void listView1_AfterSelectionChanged() {
        // Use afterSelect
        //..
        afterSelect.Clear();
    }

Вы можете использовать флаг bool вместо списка <>, если вам не нужно отслеживать, какие элементы были изменены.

0 голосов
/ 31 октября 2011
private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) {
    if (listView1.SelectedItems.Count == listView1.Items.Count) {
        // All items selected.
    }
}
...