J'ai un ListView et ObservableCollection dans mon application wpf. Je veux lier expression LINQ à ListView:bind linq expression
lv_Results.DataContext = store.Where(x => x.PR > 5).ToList();
tempStore = new M1Store()
{
SiteName = siteName,
Date = date,
url = IndexedPage,
TCY = YandexTCY.GetYandexTCY(IndexedPage),
PR = Pagerank.GetPR(IndexedPage)
};
store.Add(tempStore);
Mais quand j'ajouter de nouveaux éléments à la collection de magasin, lv_Results doesnt mises à jour. Comment puis-je mettre à jour ListView?
En fait, votre commentaire sur Où est complètement incorrect. Où va chercher de nouveaux éléments ajoutés à la collection de magasin chaque fois que IEnumerable créé par itreated. Ce n'est que lors de l'appel à ToList que les résultats sont "encadrés dans le temps", car ils sont ensuite itérés et ajoutés à une autre collection. S'il vous plaît regardez l'interne où itérateurs via réflecteur: WhereArrayIterator, WhereEnumerableIterator , WhereListIterator . Dans l'état initial, ce qui suit est exécuté: this.enumerator = this.source.GetEnumerator(); Cela récupère un énumérateur de la source au moment de l'itération. –
jrista
@jrista: Non, désolé, vous avez tort à ce sujet. Dans le code de Neir0, le "moment de l'itération" que vous mentionnez est exactement le moment où le DataContext est assigné. Le ListView énumère immédiatement son ItemsSource et le fait ** exactement une fois **. Par conséquent, la condition Where scanne la collection ** exactement une fois **. Peu importe que Neir0 utilise ToList(): Il obtiendra exactement les mêmes résultats. (En fait, il l'a fait.) Il ne se mettrait à jour que si ListView ré-énumérait périodiquement la collection, ce qui n'est pas le cas. Donc ma réponse ** est ** correcte. –
@jrista: Je ne voulais pas dire que vous ne comprenez pas comment fonctionne Où. J'essaie juste de faire remarquer que vous étiez tellement concentré sur les internes de Où vous avez manqué la grande image - qu'aucune des fonctionnalités intégrées de LINQ dans NET Framework n'est continue, et en supprimant .ToList() dans le code de Neir0 répare pas ça. Les gens de LINQ continu ont développé leur système pour y remédier. J'ai aussi développé quelque chose de très similaire il y a plusieurs années (donc j'ai aussi une très bonne compréhension de LINQ) mais mon code n'est pas encore du domaine public donc j'ai pointé Neir0 vers Continuous LINQ à la place. –