6
votes

Tri de la liste de liste lorsqu'un bouton est cliqué sur MVVM

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>

 Entrez la description de l'image ici 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>

Entrez la description de l'image ici 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>


5 commentaires

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 avoir un trier () méthode?


Pourquoi ne pas relier la case à la coche à un iSadded de la propriété du ProjectWrapper . 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) .


3 Réponses :


2
votes

Appelez cela lorsque vous ajoutez un élément à la liste Liste xxx


2 commentaires

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/...



0
votes

Vous pouvez utiliser linq

échantillon: xxx


0 commentaires

0
votes

Il devrait être suffisant lorsque vous modifiez la SortDescription dans votre XAML sur:

<scm:SortDescription PropertyName="ProjectModel.Name" />


0 commentaires