2012-02-21 2 views
0

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

я сортировать свой список по моим собственным правилам, и сказать ListView перекрашивать:

listView1.Invalidate(); 

Это хорошо и денди.

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

Что такое техника сортировать SelectedIndices?

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

ответ

1

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

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

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