说是服务器端,因我是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); } } }