43 votes

Comment puis-je trier un ListBox en utilisant uniquement du XAML et sans code-behind?

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

Dans mon XAML:

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

De mon point de vue modèle:

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

Dans un autre composant de:

view.DataContext = new ViewModel();

Il n'y a pas de code derrière! Donc, en utilisant purement XAML, comment pourrais-je trier les éléments de la ListBox? Encore une fois, le code XAML n'est pas propriétaire de l'instanciation du modèle de vue.

101voto

Kent Boogaart Points 97432

Utilisez un CollectionViewSource :

 <CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}">
    <CollectionViewSource.SortDescriptions>
        <scm:SortDescription PropertyName="SomePropertyOnYourItems"/>
    </CollectionViewSource.SortDescriptions>
</CollectionViewSource>

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

Vous souhaiterez peut-être encapsuler vos chaînes dans une classe de machine virtuelle personnalisée afin de pouvoir appliquer plus facilement un comportement de tri.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X