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.
Utilisez A CollectionViewSource
:
<CollectionViewSource x:Key="SortedItems" Source="{Binding CollectionOfStrings}"
xmlns:scm="clr-namespace:System.ComponentModel;Assembly=WindowsBase">
<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.