您的位置:首页 > 其它

WP--两种滚动条到底部加载数据的方法

2015-01-22 10:21 330 查看
如今大多数手机用户所关心的网络流量的消耗,当你的App涉及到从网络服务中获取数据,应该尽可能以最有效的方式。让用户等待,就算你的应用程序下载大量的数据不会影响用户体验。而不是让你的App只下载少量的数据。今天我就来和大家介绍下WP中两种让滚动条到底部后再加载数据的方法。

一、

我先介绍第一种方法,贴出几个关键代码用于查找控件。

public static T FindFirstChildOfType<T>(DependencyObject root) where T : class
{
Queue<DependencyObject> queue = new Queue<DependencyObject>();
queue.Enqueue(root);
while (0 < queue.Count)
{
DependencyObject dependencyObject = queue.Dequeue();
if (dependencyObject == null)
{
return default(T);
}
int num = VisualTreeHelper.GetChildrenCount(dependencyObject) - 1;
while (0 <= num)
{
DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, num);
T t = child as T;
if (t != null)
{
return t;
}
queue.Enqueue(child);
num--;
}
}
return default(T);
}
public static T FindChildOfType<T>(DependencyObject root) where T : class
{
Queue<DependencyObject> queue = new Queue<DependencyObject>();
queue.Enqueue(root);
while (queue.Count > 0)
{
DependencyObject dependencyObject = queue.Dequeue();
int num = VisualTreeHelper.GetChildrenCount(dependencyObject) - 1;
while (0 <= num)
{
DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, num);
T t = child as T;
if (t != null)
{
return t;
}
queue.Enqueue(child);
num--;
}
}
return default(T);
}


在ListBox控件的Loaded方法中添加如下代码

private void AddHandler()
{
this.m_scrollViewer = CommonUtil.FindChildOfType<ScrollViewer>(this.lstList);
if (this.m_scrollViewer != null)
{
this.m_scrollBar = CommonUtil.FindChildOfType<ScrollBar>(this.m_scrollViewer);
if (this.m_scrollBar != null)
{
m_scrollBar.ValueChanged += bar_ValueChanged;
m_scrollBar.SizeChanged += bar_SizeChanged;
}
}
}
void lstList_Loaded(object sender, RoutedEventArgs e)
{
AddHandler();
}


当滚动条到达底部的时候就会执行 MainPageVM.LoadNextData();方法...这个方法可以改成你想要的。

void bar_SizeChanged(object sender, SizeChangedEventArgs e)
{

}

void bar_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
ScrollBar bar = (ScrollBar)sender;
object obj2 = bar.GetValue(RangeBase.ValueProperty);
object obj3 = bar.GetValue(RangeBase.MaximumProperty);
if ((obj2 != null) && (obj3 != null))
{
double num = (double)obj2;
double num2 = ((double)obj3) - 2.0;
if (num >= num2)
{
this.LoadingMore.Visibility = Visibility.Visible;
this.LoadingMoreRing.IsActive = true;
var MainPageVM = base.DataContext as MainPageViewModel;
MainPageVM.LoadNextData();
}
}
}


第一种方法很简单明了...不需要用任何控件就能实现了!

-----------------------------------------------------------------------

二、

第二种则是用控件来实现的..首先你要下载DanielVaughan.ScrollViewerMonitor.rar,这是国外程序员封装好的一个控件

使用方法更加简单,如下所示:

<ListBox ItemsSource="{Binding Items}"         u:ScrollViewerMonitor.AtEndCommand="{Binding FetchMoreDataCommand}" />


注意的这里的AtEndCommand是一个附加属性,当用户滚动到列表末尾后,就会执行指定的命令。

转自:/article/5052897.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: