C# 当scrollviewer滚动到其末尾时激发(调用)方法

C# 当scrollviewer滚动到其末尾时激发(调用)方法,c#,windows-phone-7,pagination,scrollviewer,C#,Windows Phone 7,Pagination,Scrollviewer,在谷歌搜索了很多之后,我终于要问你们这些家伙了。 我已经创建了scrollviewer,其中包含项目(listboxItems)以及从webservices获取的这些项目。但一次只能提取5个项目。所以最初是5项,然后是下5项(附加到scrollviewer),然后是下5项,依此类推 注意:-此处listBoxitems在scrollviewer中使用,而不是在列表框中使用 从Web服务获取的数据也包含--> 现在假设我获取数据的方法是--> 其中nextResult是下一个项目编号(例如:-如果

在谷歌搜索了很多之后,我终于要问你们这些家伙了。
我已经创建了
scrollviewer
,其中包含项目(
listboxItems
)以及从
webservices
获取的这些项目。但一次只能提取5个项目。所以最初是5项,然后是下5项(附加到
scrollviewer
),然后是下5项,依此类推

注意:-此处
listBoxitems
scrollviewer
中使用,而不是在列表框中使用

Web服务
获取的数据也包含-->

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

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

但是我无法编写代码来检测用户是否将scrollviewer滚动到底&然后调用或触发一个方法,不管怎么说

我被scrollviewer的
垂直偏移量
延伸光
视口高度
可滚动高度
等严重混淆,即将使用它们并计算所需信息以达到上述要求


所以,如果有人知道相同或曾经使用过scrollviwer,请发布答案

我是通过向适当的事件注册新的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); }
    }

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

Hi Lumen,你的解决方案也对我有效,但是我在一个全景页面上有两个列表框,所以我在上面注册了你的代码的两个版本,但是这两个列表框混合了他们获得的数据,我如何将依赖属性与列表框链接?
getData(int nextResult)
{
      // some code to fetch the data
}
    // 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); }
    }