Winforms 当我在虚拟模式下对基础列表进行排序时,如何对ListView的选择进行排序?

Winforms 当我在虚拟模式下对基础列表进行排序时,如何对ListView的选择进行排序?,winforms,listview,virtualmode,Winforms,Listview,Virtualmode,当ListView处于虚拟模式时,您负责在通过OnRetrieveItem事件发出请求时,向ListViewaListItem提供索引n对应的 我根据自己的规则对列表进行排序,并告诉listview重新绘制: listView1.Invalidate(); 那很好,很漂亮 除非用户选择了某些项目。现在,当树重新绘制时,会选择不同的项目 排序所选骰子的方法是什么 但是如果我对自己的个人列表进行排序您需要存储所选对象,进行排序,根据新索引查找对象并重新选择它们 代码可能如下所示(根据需要进行优化)

ListView
处于虚拟模式时,您负责在通过
OnRetrieveItem
事件发出请求时,向
ListView
a
ListItem
提供索引
n
对应的

我根据自己的规则对列表进行排序,并告诉listview重新绘制:

listView1.Invalidate();
那很好,很漂亮

除非用户选择了某些项目。现在,当树重新绘制时,会选择不同的项目

排序所选骰子的方法是什么


但是如果我对自己的个人列表进行排序

您需要存储所选对象,进行排序,根据新索引查找对象并重新选择它们

代码可能如下所示(根据需要进行优化):

void listView1\u ColumnClick(对象发送者,ColumnClickEventArgs args args)
{
//存储选定的对象
List selectedObjects=new List();
foreach(listView1.SelectedIndices中的int索引)
{
添加(m_MyDataObjectsColl[index]);
}
//清除所有选定的索引
listView1.SelectedDices.Clear();
//对列表排序
SortListView(listView1,args);
//根据对象的新索引重新选择对象
foreach(选定对象中的MyDataObject selectedObject)
{
int index=m_MyDataObjectsColl.FindIndex(
委托(MyDataObject对象){return obj==selectedObject;}
);
listView1.SelectedDices.Add(索引);
}
}
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 );
    }
}