2009-08-19 48 views
9

ListViewScrollViewerのスクロールバーが仮想スクロールスペースの最下部に達しているかどうかを検出する方法はありますか?私はListView上のバインド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

は、私はこの要件を達成するためにどのように... Windowsの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; 
} 
関連する問題