0

在google了很多之后,最后我要问你们这个问题。
我创建了scrollviewer,其中包含 items( listboxItems) 和这些从webservices. 但一次只能取出 5 件物品。所以最初它将是 5 个项目,然后是下一个 5(附加到scrollviewer),然后是下一个 5,依此类推......

注意:-herelistBoxitems是在 内部使用scrollviewer,而不是列表框

从中获取的数据 webservice 还包含--->

total items
numResults (current number of items fetched) 

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

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

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

但我无法编写代码来检测用户将滚动查看器滚动到最后,然后调用或触发一个方法,不管怎么说!

我对滚动查看器的、、、等感到非常困惑,VerticalOffset即将使用它们并计算所需的信息以实现上述要求。ExtentHeightViewportHeightScrollableHeight

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

4

1 回答 1

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); }
    }

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

于 2013-04-11T09:30:19.447 回答