Как отсортировать выбор, когда я сортирую базовый список, ListView в виртуальном режиме? - PullRequest
0 голосов
/ 21 февраля 2012

Когда ListView находится в виртуальном режиме , вы отвечаете за подачу ListView a ListItem, соответствующего индексу n, когда он запрашивает через событие OnRetrieveItem.

Я сортирую свой список согласно моим собственным правилам и говорю перерисовке списка:

listView1.Invalidate();

Это прекрасно и денди.

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

Что такое метод для сортировки SelectedIndices?

Но если я отсортирую свой личный список

1 Ответ

1 голос
/ 22 февраля 2012

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

Код может выглядеть примерно так (оптимизируйте его по своему усмотрению):

void listView1_ColumnClick( object sender, ColumnClickEventArgs args )
{
    // Store the selected objects
    List<MyDataObject> selectedObjects = new List<MyDataObject>();
    foreach ( int index in listView1.SelectedIndices )
    {
        selectedObjects.Add( m_MyDataObjectsColl[index] );
    }

    // Clear all selected indices
    listView1.SelectedIndices.Clear();

    // Sort the list
    SortListView(listView1, args);

    // Reselect the objects according to their new indices
    foreach ( MyDataObject selectedObject in selectedObjects )
    {
        int index = m_MyDataObjectsColl.FindIndex(
                delegate( MyDataObject obj ) { return obj == selectedObject; }
            );
        listView1.SelectedIndices.Add( index );
    }
}
...