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

如今大多数手机用户所关心的网络流量的消耗,当你的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是一个附加属性,当用户滚动到列表末尾后,就会执行指定的命令。

 

转自:http://www.cnblogs.com/cracker/archive/2012/09/25/WindowsPhone_AtEndCommand.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值