web-dev-qa-db-fra.com

Comment puis-je trier une liste de liste en utilisant uniquement XAML et aucun code-derrière?

J'ai besoin de trier les chaînes dans un ListBox, mais il est lié au modèle de vue par un autre composant via le DataContext. Donc, je ne peux pas directement instancier le modèle d'affichage dans XAML, comme dans cet exemple , qui utilise le ObjectDataProvider.

Dans mon xaml:

<ListBox ItemsSource="{Binding CollectionOfStrings}" />

Dans mon modèle de vue:

public ObservableCollection<string> CollectionOfStrings
{
    get { return collectionOfStrings; }
}

Dans un autre composant:

view.DataContext = new ViewModel();

Il n'y a pas de code derrière! Ainsi, en utilisant purement xaml, comment puis-je trier les éléments de la liste de liste? Encore une fois, le XAML ne possède pas l'instanciation du modèle de vue.

39
Eben Geer

Utilisez A CollectionViewSource :

<CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}"
    xmlns:scm="clr-namespace:System.ComponentModel;Assembly=Win‌​dowsBase">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="SomePropertyOnYourItems"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

<ListBox ItemsSource="{Binding Source={StaticResource SortedItems}}"/>

Vous voudrez peut-être envelopper vos chaînes dans une catégorie Custom VM Class afin que vous puissiez appliquer plus facilement le comportement de tri.

87
Kent Boogaart