有没有办法对Observablecollection进行排序?

时间:2013-08-12 12:47:05

标签: vb.net observablecollection

所以我手上有一个小问题,所以我有一个Observablecollection包含一些用户可以选择的项目,具体取决于设置列表可以排序升序(新项目将在列表的底部)或降序(列表顶部的新项目)。现在我的问题出现了,当列表越来越大(即:20多项)应用程序变慢。

所以我有一个功能,所以对列表进行排序

If Globals.isSorterenSelected Then
    If Globals.SorterenValue = "Ascending" Then
       Dim l As List(Of clsOrderItems) = (From o In OrderregelsGegroepeerd).OrderBy(Function(f) f.Gang).ThenBy(Function(f) f.item).OrderByDescending(Function(f) f.hoofdartikel).ToList
       OrderregelsGegroepeerd = New ObservableCollection(Of clsOrderItems)(l)
    Else
       Dim l As List(Of clsOrderItems) = (From o In OrderregelsGegroepeerd).OrderBy(Function(f) f.Gang).ThenByDescending(Function(f) f.hoofdartikel).OrderByDescending(Function(f) f.item).ToList
       OrderregelsGegroepeerd = New ObservableCollection(Of clsOrderItems)(l)

     End If
Else
    Dim l As List(Of clsOrderItems) = (From o In OrderregelsGegroepeerd).OrderBy(Function(f) f.Gang).ThenBy(Function(f) f.item).OrderByDescending(Function(f) f.hoofdartikel).ToList
    OrderregelsGegroepeerd = New ObservableCollection(Of clsOrderItems)(l)

End If

有没有其他方法可以对“OrderregelsGegroepeerd”进行排序而无需重新创建整个Observablecollection?

1 个答案:

答案 0 :(得分:1)

'OrderregelsGegroepeerd = New ObservableCollection(Of clsOrderItems)(l)
 Dim NewIndex As Integer = 0
 For Each regel As clsOrderItems In l
     Dim idx As Integer = OrderregelsGegroepeerd.IndexOf(regel)
     OrderregelsGegroepeerd.Move(idx, NewIndex)
     NewIndex = NewIndex + 1
 Next

所以这就是我提出的方式,现在我对新产品背后的转换器只有一个小问题,但这不是什么大问题!感谢keyboardP的回复,我实际上只是在我发现问题之前才看到它,但仍然是一个很好的信息来源。

相关问题