使用Telerik的DataPager进行服务器端分页

说是服务器端,因我是WPF程序,也就是客户端了。主要是DataPager默认是一次获取全部数据,然后只显示一部分数据,如果数据量比较大,性能会有一定的影响。

我的主要做法是:根据查询得到的数据总量,生成一个List<int> 的列表复制给其Source属性。

主要代码:

1。前台代码

<StackPanel>
                <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">
                    <telerik:RadGridView.Columns>
                        <telerik:GridViewDataColumn Header="账号" DataMemberBinding="{Binding UserName}"  Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
                        <telerik:GridViewDataColumn Header="密码" DataMemberBinding="{Binding Password}" Width="100" TextAlignment="Left" HeaderTextAlignment="Center"/>
                    </telerik:RadGridView.Columns>
                </telerik:RadGridView>
                <telerik:RadDataPager x:Name="mailPager" Source="{Binding IndexList}" PageIndexChanged="mailPager_PageIndexChanged"  PageSize="20" DisplayMode="FirstLastPreviousNext, Text"/>
            </StackPanel>

2。后台代码

public NetsMail()
        {
            InitializeComponent();

            model = new NetsMailViewModel();
            this.DataContext = model;
        }

        private void mailPager_PageIndexChanged(object sender, Telerik.Windows.Controls.PageIndexChangedEventArgs e)
        {
            if (model != null)
            {
                model.PageIndex = e.NewPageIndex;
            }
        }

这里用到了DataGrid的PageIndexChanged事件

 PageIndexChanged="mailPager_PageIndexChanged" 

主要的原因是我在使用PageIndex="{Binding PageIndex}"时,数据一直没有更显到ViewModel当中,不知道什么原因,只有采用这种方法,破坏了MVVM完好性。

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);
            IndexList = Enumerable.Range(0, count).ToList<int>();
        }

        private List<Email> emailList;

        public List<Email> EmailList
        {
            get { return emailList; }
            set { emailList = value; this.RaisePropertyChanged("EmailList"); }
        }

        private List<int> indexList;

        public List<int> IndexList
        {
            get { return indexList; }
            set { indexList = value;}
        }

        private int pageIndex;

        public int PageIndex
        {
            get { return pageIndex; }
            set 
            {
                int count;
                pageIndex = value;
                EmailList = NetsService.GetEmailAccounts(value, 20, out count);
            }
        }       
    }
 
原文地址:https://www.cnblogs.com/Leman/p/3404450.html