当scrollviewer滚动到它的结尾时,fire(call)方法

时间:2013-04-11 08:48:39

标签: c# windows-phone-7 pagination scrollviewer

经过google搜索后,我最终会问你们这些人 我创建了scrollviewer,其中包含项目(listboxItems)以及从webservices获取的这些项目。但是一下子只能拿出5件物品。所以最初它将是5个项目,然后是5个项目(附加到scrollviewer)然后接下来5个等等......

注意:listBoxitems内部使用了scrollviewer,而不是列表框

webservice 获取的

数据还包含 --->

total items
numResults (current number of items fetched) 

现在假设我获取数据的方法是--->

getData(int nextResult)
{
      // some code to fetch the data
}

其中nextResult是下一个项目编号(例如: - nextResult是6,如果请求第二次)

但是我无法编写代码来检测用户是否将滚动查看器滚动到结尾&然后是一个被调用或解雇的方法,不管怎么说!

我在滚动浏览器VerticalOffsetExtentHeightViewportHeightScrollableHeight等方面感到非常困惑,即将使用它们&计算所需信息以达到上述要求。

所以,如果有人知道相同或曾经使用过的卷轴,请发布回答。

1 个答案:

答案 0 :(得分:1)

我通过使用适当的事件注册新的DependencyProperty ListVerticalOffset来实现它:

    // Constructor
    public MainPage()
    {
        InitializeComponent();

        ListVerticalOffsetProperty = DependencyProperty.Register("ListVerticalOffset", typeof(double), typeof(MainPage), new PropertyMetadata(OnListVerticalOffsetChanged));

        YourScrollViewer.Loaded += YourScrollViewer_Loaded;
    }

    void YourScrollViewer_Loaded(object sender, RoutedEventArgs e)
    {
        var binding = new Binding
            {
                Source = YourScrollViewer,
                Path = new PropertyPath("VerticalOffset"),
                Mode = BindingMode.OneWay
            };
        SetBinding(ListVerticalOffsetProperty, binding);
    }

    private void OnListVerticalOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        var atBottom = YourScrollViewer.VerticalOffset >= YourScrollViewer.ScrollableHeight;
        if (atBottom) MessageBox.Show("End");
    }

    public readonly DependencyProperty ListVerticalOffsetProperty;

    public double ListVerticalOffset
    {
        get { return (double)GetValue(ListVerticalOffsetProperty); }
        set { SetValue(ListVerticalOffsetProperty, value); }
    }

可能是这个解决方案,或者它的实现并不是最优的,但它对我有用。