Filtrer une collection Observable?
Quand je lier une zone de liste directement à une ObservableCollection-je obtenir le temps réel des mises à jour affichées dans ma ListBox, mais dès que j'ajoute d'autres méthodes LINQ dans le mélange de ma ListBox n'est plus avisé de tout changement à l'ObservableCollection.
Ici, permettez-moi d'illustrer mon propos avec un exemple;
public partial class MainPage : PhoneApplicationPage
{
ObservableCollection<String> Words = new ObservableCollection<string>();
public MainPage()
{
InitializeComponent();
listBox1.ItemsSource = Words;
}
private void AddButton_Click(object sender, RoutedEventArgs e)
{
Words.Add(DateTime.Now.ToString());
}
}
Ici, j'ai ajouté un Bouton et une zone de liste à une simple Page, et en cliquant sur le bouton nouvel élément apparaît immédiatement dans la zone de liste.
Cependant, si je change de
listBox1.ItemsSource = Words;
à
listBox1.ItemsSource = Words.Where(w => w.Contains(":"));
la zone de liste n'est plus mise à jour.
Comment puis-je ajouter un "filtre" entre mes ObservableCollection et de la zone de liste, et toujours avoir à mettre à jour sans avoir à mettre de la .ItemsSource de nouveau?
source d'informationauteur Frode Lillerud
Vous devez vous connecter pour publier un commentaire.
Essayez d'utiliser l'objet collectionviewsource comme ceci:
Pourquoi il ne fonctionne pas:
Votre ne lient pas l'ObservableCollection mais l'interface IEnumerable généré par Linq. Cette nouvelle "liste" ne pas avertir la zone de liste sur les changements dans la liste.
Vous devez utiliser le
ICollectionView.Filter
propriété: