[WP7/Silverlight] Détecter la fin du scroll d’une ListBox
Pour les besoins d’un projet récent sur Windows Phone 7, le client souhaitait faire en sorte que lorsque l’utilisateur ait fini de scroller dans sa ListBox, si celle-ci se trouve être à la fin, alors on ré-interroge la source de données pour récupérer d’autres data et les injecter dans le contrôle.
Pour faire simple, imaginer une ListBox infinie mais avec de la pagination 
Pour mettre en place cela, c’est tout simple. En effet, le code suivant permet d’accéder à la Scrollbar interne à la Listbox et de s’abonner à son évènement ValueChanged. Dans la callback, on regarde si la valeur actuelle correspond bien à la propriété Maximum de la Scrollbar, et le tour est joué:
1: private double _lastScrollbarValue;
2:
3: void ListBoxLoaded(object sender, RoutedEventArgs e)
4: {
5: if(_scrollBar != null)
6: _scrollBar.ValueChanged -= ScrollBarValueChanged;
7:
8: _scrollBar = _listBox.GetChildrenByType<ScrollBar>(s => s.Name == "VerticalScrollBar").FirstOrDefault();
9:
10: if (_scrollBar != null)
11: _scrollBar.ValueChanged += ScrollBarValueChanged;
12: }
13:
14: void ScrollBarValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
15: {
16: if (e.NewValue == _scrollBar.Maximum && e.NewValue != _lastScrollbarValue)
17: {
18: // Here, load more data !
19: }
20:
21: _lastScrollbarValue = e.NewValue;
22: }
Simple comme tout mais pourtant très pratique 
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :