zoukankan      html  css  js  c++  java
  • 使用Telerik的DataPager进行服务器端分页(改进版)

    使用Telerik的DataPager进行服务器端分页那篇里面,我使用了一个List<int>列表作为DataPager的Source,总感觉有点牵强。另外,PageIndex="{Binding PageIndex}"总是不能将PageIndex的更改传到ViewModel当中,最后使用了PageIndexChanged事件实现PageIndex的更显,破坏了ViewModel的完整性。昨天看了一下Telerik:DataPager的API,发现其支持ItemCount、PageIndex、PageCount等依赖属性,我下想:为什么一定要Source属性呢,知道上面三个参数对于DataPager已经足够了,PageIndex不能自动更新到后台可能是DataPager默认是单项绑定的原因。好了,赶紧实验吧:

    1.前台界面

    1 <StackPanel>
    2                 <telerik:RadGridView ItemsSource="{Binding EmailList}" AutoGenerateColumns="False" CanUserInsertRows="False" CanUserDeleteRows="False" IsReadOnly="True" EnableColumnVirtualization="False" EnableRowVirtualization="False" IsFilteringAllowed="False" ShowGroupPanel="False" CanUserReorderColumns="False" CanUserSortColumns="False">
    3                     <telerik:RadGridView.Columns>
    4                         <telerik:GridViewDataColumn Header="账号" DataMemberBinding="{Binding UserName}"  Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
    5                         <telerik:GridViewDataColumn Header="密码" DataMemberBinding="{Binding Password}" Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
    6                     </telerik:RadGridView.Columns>
    7                 </telerik:RadGridView>
    8                 <telerik:RadDataPager x:Name="mailPager" ItemCount="{Binding ItemCount,Mode=TwoWay}" PageSize="20" PageIndex="{Binding PageIndex,Mode=TwoWay}" DisplayMode="FirstLastPreviousNext, Text"/>
    9             </StackPanel>

    对ItemCount和PageIndex属性指定绑定模式为双向绑定,确保数据能够返回到ViewModel当中。

    2.后台代码

    public NetsMail()
            {
                InitializeComponent();
    
                this.DataContext = new NetsMailViewModel();
            }

    后台代码也不需要处理PageIndexChanged事件了。

    3.ViewModel类

    public class NetsMailViewModel : NotificationObject
        {
            [Import(typeof(INetsDesktopContract))]
            public INetsDesktopContract NetsService { get; set; }
    
            public NetsMailViewModel()
            {
                NetsService = App.Container.GetExportedValue<INetsDesktopContract>();
    
                int count; 
                emailList = NetsService.GetEmailAccounts(0, 20, out count);
    
                PageIndex = 0;
                ItemCount = count;
            }
    
            private List<Email> emailList;
    
            public List<Email> EmailList
            {
                get { return emailList; }
                set { emailList = value; this.RaisePropertyChanged("EmailList"); }
            }
    
            private int pageIndex;
    
            public int PageIndex
            {
                get { return pageIndex; }
                set 
                {
                    int count;
                    pageIndex = value;
                    EmailList = NetsService.GetEmailAccounts(pageIndex, 20, out count);
                    ItemCount = count;
                    this.RaisePropertyChanged("PageIndex");
                }
            }
    
            private int itemCount;
    
            public int ItemCount
            {
                get { return itemCount; }
                set { itemCount = value; this.RaisePropertyChanged("ItemCount"); }
            }      
        }

    大功告成,是不是看起来清爽多了。放一下最终效果图。

              

  • 相关阅读:
    模拟退火大法好
    宿命的PSS
    博客在summeroi.top上更新
    SPFA模板
    BZOJ 4551: [Tjoi2016&Heoi2016]树
    BZOJ 4152: [AMPPZ2014]The Captain
    BZOJ 3930: [CQOI2015]选数
    BZOJ 3875: [Ahoi2014&Jsoi2014]骑士游戏
    BZOJ4318: OSU!
    BZOJ3170: [Tjoi 2013]松鼠聚会
  • 原文地址:https://www.cnblogs.com/Leman/p/3404632.html
Copyright © 2011-2022 走看看