An eine sortierte ObservableCollectionT in einer ListBox binden

8

Ich habe eine Liste von Datenobjekten in meiner Windows Phone 7-Anwendung namens MyObjectList , die ObservableCollection<MyObject> erbt. Ich behalte die Liste im Speicher in einer öffentlichen Eigenschaft von App namens MyObjects . Mein Ziel ist es, die Daten an eine ListBox zu binden und sie nach MyObject.Name zu sortieren.

Zur Zeit habe ich ein ListBox in XAML mit dem Namen MyObjectsList und dem folgenden Code im Konstruktor, um es zu verknüpfen:

%Vor%

Das funktioniert großartig. Ich füge Elemente zu MyObjects hinzu und sie werden in ListBox angezeigt. Die Daten werden jedoch nicht nach Namen sortiert, wenn sie in der Liste angezeigt werden. Ich habe die folgende Änderung versucht, um die Daten zu sortieren:

%Vor%

Aber wenn ich das tue, sehe ich keine Objekte, die in ListBox sortiert oder auf andere Weise reflektiert werden.

Was kann ich tun, damit, wenn ich ein Element zu meinem ObservableCollection hinzufüge, es nach .Name im ListBox ?

sortiert angezeigt wird     
Ben McCormack 24.08.2010, 02:49
quelle

4 Antworten

11

Das Problem mit Ihrem Beispiel ist die OrderBy-Methode, die anstelle einer ObservableCollection einen IoberedEnumerable-Objekttyp zurückgibt.

Hier können Sie etwas tun, ohne eine benutzerdefinierte Sammlung wie einige der anderen Antworten zu implementieren.

%Vor%

Die anderen Antworten schlagen alle brauchbare Alternativen vor, aber das wird das Problem in der Frage lösen.

FWIW, in Silverlight 4 gibt es eine PagedCollectionView, aber Silverlight von Windows Phone 7 basiert auf Silverlight 3 und ist nicht verfügbar. Ich erwähne das nur, um Sie in Erwartung von WP7 auf SL4 aufmerksam zu machen.

    
Matt Casto 24.08.2010 12:38
quelle
4

Sie könnten eine sortierte Sammlung anstelle Ihres standardmäßigen ObservableCollection verwenden. Jemand hat hier eine SortedObservableCollection geschrieben:

  

Ссылка

    
Timwi 24.08.2010 02:57
quelle
1

Dies hilft Ihnen nicht bei Silverlight, aber für WPF 3.5 / 4 gibt es eine bessere Möglichkeit, dies zu tun, was CollectionView

    
Paul Betts 24.08.2010 03:01
quelle
0

Schauen Sie sich Ссылка an.

Es wird erläutert, wie ObservableCollection erweitert wird, um die zugrunde liegende Items.Sort () -Methode verfügbar zu machen und Listener dann zu benachrichtigen, dass sich die Auflistung geändert hat.

Auch Dieser Beitrag hier .. könnte Ihnen dabei helfen. Es verwendet CollectionView.

    
VoodooChild 24.08.2010 02:56
quelle