Lier à une triés ObservableCollection<T> dans une ListBox
J'ai une liste d'objets de données dans mon application Windows Phone 7 appelé MyObjectList
, qui hérite ObservableCollection<MyObject>
. Je garde la liste en mémoire dans une propriété publique de App
appelé MyObjects
. Mon objectif est de lier les données à un ListBox
et les ont triés par MyObject.Name
.
Actuellement, j'ai un ListBox
en XAML avec le nom MyObjectsList
et le code suivant dans le constructeur de lien:
public MyObjectListView()
{
InitializeComponent();
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects;
}
Cela fonctionne très bien. - Je ajouter des articles à MyObjects
et ils apparaissent dans la ListBox
. Cependant, les données ne sont pas triées par nom lorsqu'il apparaît dans la liste. J'ai essayé la modification suivante pour obtenir les données à trier:
this.MyObjectsList.ItemsSource = ((App)App.Current).MyObjects
.OrderBy(x => x.Name)
Mais quand je fais ça, je ne vois pas tout objets reflétés dans le ListBox
triés ou autrement.
Que puis-je faire pour que lorsque je ajouter un article à mon ObservableCollection
, il se présente triés par .Name
dans le ListBox
?
OriginalL'auteur Ben McCormack | 2010-08-24
Vous devez vous connecter pour publier un commentaire.
Le problème avec votre exemple est OrderBy méthode retourne un IOrderedEnumerable type d'objet au lieu d'une ObservableCollection.
Voici quelque chose que vous pouvez faire sans la mise en œuvre d'une collection personnalisée à l'instar de certains de l'autre des réponses.
Autres réponses suggèrent des alternatives viables, mais cela va résoudre le problème dans la question.
FWIW, dans Silverlight 4 il est PagedCollectionView, mais Windows Phone 7 Silverlight est basé sur Silverlight 3 et qui n'est pas disponible. Je suis le seul fait de mentionner ce pour vous tenir au courant de cela, en prévision de WP7, éventuellement, la mise à jour pour SL4.
Excellente solution.
OriginalL'auteur Matt Casto
Vous pouvez utiliser une collection triée à la place de votre standard
ObservableCollection
. Quelqu'un a écrit unSortedObservableCollection
ici:Je ne pense pas que quiconque puisse avoir une collection assez large de O(n) qui est un problème.
OriginalL'auteur Timwi
Cela ne vous aidera pas pour Silverlight, mais pour WPF 3.5/4, il existe une meilleure façon de faire cela impliquant CollectionView
OriginalL'auteur Paul Betts
Prendre un coup d'oeil à http://mokosh.co.uk/post/2009/08/04/how-to-sort-observablecollection/.
Il explique comment étendre ObservableCollection à exposer les Éléments sous-jacents.Méthode sort() et puis informer les auditeurs que la collection a changé.
Aussi, Ce Post ici.. peut vous aider avec elle. Il utilise CollectionView.
<CollectionViewSource .../>
. Une fois que j'ai compris le droit des espaces de noms à utiliser (toujours un défi avec XAML), il a parfaitement fonctionné. Merci!Le premier lien semble mort
OriginalL'auteur VoodooChild