En utilisant .NET 3.5, je trouve qu'un CollectionView avec un filtre ne se met pas à jour lorsque ObservableCollection (T) sous-jacent a déplacé des éléments en utilisant ObservableCollection (T) .Move. Comme un test de santé mentale, j'ai commencé avec un projet simple, un de Bea Stollnitz 'de cette page: http://bea.stollnitz.com/blog/?p=31. Le projet actuel peut être téléchargé ici: bea.stollnitz.com/files/28/FilterSample.zip. Si vous allez dans son dossier Window1.xaml et ajouter un bouton comme celui-ci:CollectionView avec filtre ne pas mettre à jour après ObservableCollection <T>. Déplacer
<StackPanel>
<Button Content="Blah" Click="Button_Click"/>
puis ajoutez le gestionnaire de clic comme ceci:
private void Button_Click(object sender, RoutedEventArgs e) {
GreekGods src1 = this.Resources["src1"] as GreekGods;
src1.Move(0, 1);
}
Vous verrez que appuyant sur le bouton ne résulte pas dans tout changement de la fenêtre. Toutefois, si vous commentez la ligne de code dans son constructeur:
collectionView.Filter = new Predicate<object>(FilterOutA);
puis appuyez sur le bouton, vous verrez les deux éléments supérieurs position de swap.
Alors, qu'est-ce qui me manque? Est-ce un bug ou est-ce que CollectionView perd cette fonctionnalité quand vous appliquez un filtre? Je peux comprendre si vous avez trié CollectionView, puis changer l'ordre sous-jacent ne changera pas l'ordre de CollectionView, mais ce n'est pas vrai ici. Ne devrait-il pas seulement avoir un filtre sur CollectionView continuer à montrer l'ordre et la mise à jour de ObservableCollection sous-jacente quand elle change?
Merci, Kevin
Je suis sûr que vous avez raison à ce sujet, mais malheureusement, je pense que c'est un cas de mon exemple n'étant pas construit comme mon cas réel. Je suis certain que j'ai vérifié l'état auquel vous faites référence dans mon cas réel et que cela ne s'appliquait pas. J'ai juste devancé moi-même quand j'ai trouvé cet exemple qui semblait également ne pas fonctionner. Je vais revenir à la planche à dessin et voir si je peux mettre en place un meilleur exemple (et reconfirmer que ce n'est pas ce qui se passe dans mon cas réel). Merci! –