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

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

使用Telerik的DataPager进行服务器端分页(改进版)          使用Telerik的DataPager进行服务器端分页(改进版)

相关文章: