[英]fire (call) method, when scrollviewer scrolled to its end
谷歌搜索了很多之后,最后我要问你们。
我创建了scrollviewer
,其中包含items( listboxItems
)和从webservices
获取的这些项目。 但一次只能提取5个项目。 因此最初将是5个项目,然后是下5个(追加到scrollviewer
),然后是下5个,依此类推...
注意:这里的listBoxitems
用于scrollviewer
而不是listbox
从 webservice
获取的数据 还包含 --->
total items
numResults (current number of items fetched)
现在假设我获取数据的方法是->
getData(int nextResult)
{
// some code to fetch the data
}
其中nextResult是下一个商品编号(例如:如果第二次请求,nextResult为6)
但是我无法编写代码来检测用户将scrollviewer滚动到末尾,然后再调用或触发一个方法,无论怎么说!
我一直对scrollviewer的VerticalOffset
, ExtentHeight
, ViewportHeight
, ScrollableHeight
等感到困惑,即将使用它们并计算所需的信息以实现上述要求。
因此,如果有人知道相同或曾经使用过的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); }
}
可能是这种解决方案,或者它的实现不是最佳的,但是它对我有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.