zoukankan      html  css  js  c++  java
  • 浅谈listbox的分页加载|下拉更新

    ListBox的分页加载,相信在很多应用中大家都已经见到过了。但是在WP7开发中,这个功能开发起来似乎是不那么直观(因为没有那么个ScrollEnd事件),我在学习开发这个功能的时候第一步是先百度谷歌Bing的,为了不重复造轮子。其实有很多人都在问这个问,大家的共同关注点只有一个,就是如何判断ListBox的滚动条滚动到了底部,所以,此篇文章我也就只围绕如何判断滚动到底来展开了,其他的部分暂略。我记得曾经看到了一个英文的文章实现了这个效果,写的很复杂,好多好多的类,本人比较懒,就没继续看……,后来从某中文论坛看到了一个非常简单的方法,不得不感叹我们中国人的聪明才智啊。

     1 private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
     2       {
     3           List<ScrollBar> scrollBarList = GetVisualChildCollection<ScrollBar>(lstBizs);
     4           foreach (ScrollBar scrollBar in scrollBarList)
     5           {
     6               if (scrollBar.Orientation == System.Windows.Controls.Orientation.Horizontal)
     7               {
     8                    
     9               }
    10               else
    11               {
    12                   scrollBar.ValueChanged += new RoutedPropertyChangedEventHandler<double>(verticalScrollBar_ValueChanged);
    13               }
    14           }
    15       }
    16  
    17  
    18       private void verticalScrollBar_ValueChanged(object sender, RoutedEventArgs e)
    19       {
    20           ScrollBar scrollBar = (ScrollBar)sender;
    21           object valueObj = scrollBar.GetValue(ScrollBar.ValueProperty);
    22           object maxObj = scrollBar.GetValue(ScrollBar.MaximumProperty);
    23           if (valueObj != null && maxObj != null)
    24           {
    25               double value = (double)valueObj;
    26               double max = (double)maxObj - 1.0;
    27               if (value >= max)
    28               {
    29                  //读取下一页的数据
    30               }
    31           }
    32       }
    33  
    34 ?
    35 public static List<T> GetVisualChildCollection<T>(object parent) where T : UIElement
    36 {
    37     List<T> visualCollection = new List<T>();
    38     GetVisualChildCollection(parent as DependencyObject, visualCollection);
    39     return visualCollection;
    40 }
    41 private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : UIElement
    42 {
    43     int count = VisualTreeHelper.GetChildrenCount(parent);
    44     for (int i = 0; i < count; i++)
    45     {
    46         DependencyObject child = VisualTreeHelper.GetChild(parent, i);
    47         if (child is T)
    48         {
    49             visualCollection.Add(child as T);
    50         }
    51         else if (child != null)
    52         {
    53             GetVisualChildCollection(child, visualCollection);
    54         }
    55     }
    56 }

    这个代码非常的简洁精悍,并非我原创,但我直接拿过来之后发现它运行的很好,真的很好用。我唯一的一点修改就是“double max = (double)maxObj - 1.0; ”,这里说明一下,value是ScrollBar当前的值,max可想而知是最大值,但是如果当用户把滚动条拉到底部才开始加载下页数据,会明显的出现一个停顿,所以我设定的规则是“当用户把滚动条拉到倒数第一行的时候就开始加载下页数据”,1.0的这个值按需求修改就好了。

  • 相关阅读:
    tcp/ip--百度百科
    Web service--百度百科
    .NET--百度百科
    ibatis--百度百科
    Struts2--百度百科
    spring--百度百科
    从头认识Spring-1.15 对SpEl的值的操作(1)-数值运算
    performSelector 方法的自己主动俘获特性
    图解WinHex使用入门
    LINQ使用与并行
  • 原文地址:https://www.cnblogs.com/Yukang1989/p/2818370.html
Copyright © 2011-2022 走看看