Je cherche une solution pour mon problème depuis hier. Je construis un problème avec motif MVVM. J'ai eu deux usercontrol, qui contiennent les deux une liste de liste.
Le premier USERCONTROL s'appelle RechercheView qui contient une liste de noms de projet, que l'utilisateur peut sélectionner et enregistrer dans les applications locales dB. p>
p>
Lorsque les projets sélectionnés sont ajoutés, un événement est tiré qui notifie le 2e USERCONTROL qui est nommé" ProjectView ". Cet UserControl montre simplement quels projets sont enregistrés localement. Vu à l'image ci-dessous. P>
P>
Le problème est que je souhaite pouvoir trier la liste de la liste montée par nom dans le projetView. De sorte que si l'utilisateur ajoutez d'abord "Tester le projet 2" et après Ajouter "Tester le projet 1" "Le" projet de test 1 "est affiché en haut de la liste. P>
J'ai essayé d'utiliser ICollectionview et ListCollectionview Mais je suis très vraiment confus pour le moment. p>
Alors maintenant, mon code ressemble à ceci, dans le projetViewModel qui doit trier la liste de liste: P>
<UserControl.Resources> <CollectionViewSource x:Key="cvs" Source="{Binding Path=Projects}"> <CollectionViewSource.SortDescriptions> <scm:SortDescription PropertyName="ProjectWrapper.Project.Name" /> </CollectionViewSource.SortDescriptions> </CollectionViewSource> </UserControl.Resources> <ListBox Name="ProjectsList" ItemsSource="{Binding Source={StaticResource cvs}}" SelectedItem="{Binding Path=SelectedProject}" HorizontalContentAlignment="Stretch" BorderThickness="0" Grid.Row="1" Grid.RowSpan="3" Margin="0,0.4,-0.2,27.8"> <ListBox.ItemTemplate> <DataTemplate> <DockPanel> <TextBlock Text="{Binding Path=ProjectModel.Name}" HorizontalAlignment="Left" VerticalAlignment="Center" Padding="3,2,0,0" /> <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="0,2,5,0" Margin="0,2.5,0,0" /> </DockPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox>
3 Réponses :
Appelez cela lorsque vous ajoutez un élément à la liste code> Liste code>
Cette réponse fonctionne vraiment bien! Merci beaucoup! J'ai eu une petite question de suivi. Savez-vous ce qui pourrait être fait si vous avez un numéro à la fin du nom du projet? Disons que j'ai les projets suivants: Test Project 1 - 10. Comme c'est le cas, le tri est comme celui-ci: Projet de test 1, Projet de test 10 et Projet de test 2 - 9.
Essayez ceci pour votre question de suivi. Stackoverflow.com/Questtions/6396378/...
Vous pouvez utiliser linq
échantillon: p>
Il devrait être suffisant lorsque vous modifiez la SortDescription dans votre XAML sur:
<scm:SortDescription PropertyName="ProjectModel.Name" />
Est-ce que ceci ( Stackoverflow.com/Questtions/1280704/... ) abandonner toute la lumière pour vous?
Pourquoi ne mettez-vous pas en œuvre l'interface icomparable dans votre classe de projetWrapper, puis vous faites des projets.sort ()?
Oui, j'ai regardé cette question et j'ai essayé la même chose. Mais cela ne trie pas ma liste correctement. Si j'ai ajouté le projet 3, puis proejct 2, il est trié correctement -> Projet 1, puis projet 3. Mais lorsque le projet 2 est ajouté, ce qui devrait être dans le Middel des deux projets, il est ajouté au sommet de TIL ListBox .
@Eduardobrites Où est-ce que
system.collections.objectmodel.observablecollection code> avoir un
trier () code> méthode?
Pourquoi ne pas relier la case à la coche code> à un
iSadded code> de la propriété du
ProjectWrapper code>. Comme votre événement est pris dans le deuxième modèle d'affichage, je supprimerais complètement la liste et la reconsuez comme
ADJECTPROJECTS = ORIGINALPROJECTS.PORTS (P => P.ISADDED) .Orderby (p => P.Name) Code >.