2009-08-07 4 views
2

J'utilise le nouveau PagedCollectionView en tant que ItemsSource.Comment implémenter le filtrage "en direct" dans Silverlight

Je suis lié à l'CollectionView un DataGrid et besoin de la grille présentent des valeurs seulement qui passe mon filtre comme ceci:

  var oc = new ObservableCollection<User>(); 
     var pc = new PagedCollectionView(oc); 
     dataGrid.ItemsSource = pc; 

Où classe utilisateur implémente INotifyPropertyChanged. J'applique un filtre comme ceci:

 private void CheckBox_Checked(object sender, RoutedEventArgs e) 
    { 
     pc.Filter += Include; 
    } 

    private bool Include(object obj) 
    { 
     return (obj as User).Name == filterText.Text; 
    } 

Et cela fonctionne. Le problème est que si je mets à jour un utilisateur, le résultat du filtre n'est pas mis à jour. Si un effacer et réappliquer le filtre cela fonctionne.

Bien sûr, je peux appeler la méthode Refresh() sur PagedCollectionView, mais je pensais que c'était possible de le faire sans rafraîchir la vue manuellement.

Ce dont j'ai besoin, c'est d'un mécanisme de "filtrage en direct". Une idée sur la façon de coder? Le scénario est: Une application pour visualiser les alarmes en direct sur un système. Supposons qu'un utilisateur a sélectionné pour afficher uniquement les lignes avec "Erreur" ou "Avertissement" dans column0 (c'est mon filtre). Lorsque colonne0 dans une ligne puis change de "Info" à "Avertissement" cette ligne devrait être automagiquement visible (il passe le filtre) sans que j'appelle Refresh().

Merci Larsi

Répondre

0

Ne pourriez-vous simplement utiliser le contrôle AutoCompleteBox dans le SDK Silverlight 3?

+0

Hmmmm. Je ne suis pas sûr de comprendre comment. J'ai mis à jour le post avec un scénario pour clarifier ce dont j'ai besoin – Larsi

Questions connexes