2012-07-10 5 views
5

Questo dovrebbe essere facile, e mi vergogno non l'ho ancora scoperto. Sto cercando di invertire l'ordine di un elenco di elementi nella mia app wp7. L'elenco è ObservableCollection. Quando si utilizza system.linq, intellisense mi consente di farlo: myList.Reverse(); , ma questo non sembra funzionare. Sto facendo qualcosa di sbagliato, o c'è un altro modo in cui posso farlo facilmente?Inversione di una ObservableCollection <objectType> utilizzando linq

Grazie in anticipo.

+3

"Non sembra al lavoro", come? Intendi dire che l'interfaccia utente non mostra gli articoli in ordine inverso? – user7116

+0

Domanda correlata, ma non necessariamente un duplicato http://stackoverflow.com/questions/10413535/reverse-order-of-observablecollection – user7116

risposta

23

Reverse restituisce un IEnumerable, non modifica la raccolta. Per modificare la collezione si potrebbe fare

collection = new ObservableCollection<YourType>(collection.Reverse()); 
+2

Questo è il tipo di soluzione che stavo cercando. E ha funzionato come un fascino. Grazie! –

+0

Come può funzionare, quando la raccolta è ObservableCollection? Quella lezione non ha Reverse ...? Almeno, questo è il messaggio che ricevo quando provo questo. – Erik

+1

Reverse è un metodo di estensione all'interno della classe System.Linq.Enumerable. Aggiungi l'istruzione using per System.Linq; –

0

rendere una classe che eredita la raccolta di osservazioni (di T) e implementare un oggetto di ordinamento in esso. Questo è un modo vb.net forza bruta di farlo:

Public Sub Sort(ByVal comparer As IComparer(Of T)) 
    Dim j As Integer 
    Dim index As T 
    For i As Integer = 1 To Count - 1 
     index = Me(i) 
     j = i 
     While (j > 0) AndAlso (comparer.Compare(Me(j - 1), index) = 1) 
      Me(j) = Me(j - 1) 
      j = j - 1 
     End While 
     Me(j) = index 
    Next 
End Sub 
2

Se non si desidera ricreare la raccolta:

for (int i = 0; i < collection.Count; i++) 
    collection.Move(collection.Count - 1, i);