2009-08-19 6 views
9

ListView에있는 ScrollViewer의 스크롤바가 가상 스크롤 공간의 맨 아래에 도달했는지 감지하는 방법이 있습니까? 서버에서 더 많은 항목을 가져 와서 의 ObservableCollection 바운드에 넣으려는 것을 감지하고 싶습니다.WPF 목록보기 스크롤 막대가 아래쪽에있을 때를 감지합니까?

private void currentTagNotContactsList_scrollChanged(object sender, ScrollChangedEventArgs e) { 

    ListView v = (ListView)sender; 


    if (e.VerticalOffset + e.ViewportHeight == e.ExtentHeight) { 
     Debug.Print("At the bottom of the list!"); 
    } 

} 

이도 정확 :

는 지금은이 일을 해요? 이벤트를 발생시키는 세로 스크롤 막대와 가로 스크롤 막대를 구분해야합니다 (즉, 상자의 아래쪽을 가로로 스크롤하면 서버에 대한 호출을 계속 생성하고 싶지 않음).

감사합니다.

답변

8

나는 그것을 알아 냈다. 뷰어가 아닌 ScrollBar (XAML의 <ListView ScrollBar.Scroll="currentTagNotContactsList_Scroll")에서 이벤트를 가져와야하는 것 같습니다. 이 작동하지만, 일단 스크롤바가 내려지면 반복적으로 호출되는 이벤트 핸들러를 피하는 방법을 찾아야합니다. 어쩌면 타이머가 좋은 것 : UWP를 들어

private void currentTagNotContactsList_Scroll(object sender, ScrollEventArgs e) { 

    ScrollBar sb = e.OriginalSource as ScrollBar; 

    if (sb.Orientation == Orientation.Horizontal) 
     return; 

    if (sb.Value == sb.Maximum) { 
     Debug.Print("At the bottom of the list!"); 

    } 

} 
+2

ScrollBar.Scroll처럼있어 윈도우 10 – djkp

1
//A small change in the "Max's" answer to stop the repeatedly call. 
//this line to stop the repeatedly call 
ScrollViewer.CanContentScroll="False" 

private void dtGrid_ScrollChanged(object sender, ScrollChangedEventArgs e) 
       { 
//this is for vertical check & will avoid the call at the load time (first time) 
        if (e.VerticalChange > 0) 
        { 
         if (e.VerticalOffset + e.ViewportHeight == e.ExtentHeight) 
         { 
          // Do your Stuff 
         } 
        } 
       } 
0

내가이 요구 사항을 달성하는 방법 .. 윈도우 10에서 ListView에 존재하지 않습니다이

<ScrollViewer Name="scroll" ViewChanged="scroll_ViewChanged"> 
    <ListView /> 
</ScrollViewer> 

private void scroll_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e) 
{ 
    var scrollViewer = (ScrollViewer)sender; 
    if (scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight) 
      btnNewUpdates.Visibility = Visibility.Visible; 
} 
관련 문제