使用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"); }
        }      
    }

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

          

转载于:https://www.cnblogs.com/Leman/p/3404632.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值