WPF+ListView+Linq+MVVM模式实现分页

35 篇文章 1 订阅

http://www.cnblogs.com/tongly/archive/2010/11/10/1873881.html

1.例子实现了动态页数,当前页、总页数的显示,功能相对简单。

【效果图】

【前台界面】

复制代码
< Window  x:Class ="LinqPager.Window1"
        xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
        ResizeMode
="NoResize"
        Title
="Linq分页例子"
        WindowState
="Maximized"
        
>

    
< Grid >

        
< Grid.RowDefinitions >
            
< RowDefinition  Height ="*" />
            
< RowDefinition  Height ="30" />
        
</ Grid.RowDefinitions >

        
< ListView  Grid.Row ="0"  ItemsSource =" {Binding Lst_bind} " >
            
< ListView.View >
                
< GridView >
                    
< GridView.Columns >
                        
< GridViewColumn  DisplayMemberBinding =" {Binding Name} "  Header ="名称"     Width ="200" />
                        
< GridViewColumn  DisplayMemberBinding =" {Binding Age} "  Header ="年龄"      Width ="200" />
                        
< GridViewColumn  DisplayMemberBinding =" {Binding Address} "  Header ="地址"  Width ="200" />
                    
</ GridView.Columns >
                
</ GridView >
            
</ ListView.View >
        
</ ListView >


        
< StackPanel  Orientation ="Horizontal"  Grid.Row ="1" >

            
< ItemsControl  ItemsSource =" {Binding Pages} " >

                
< ItemsControl.ItemTemplate >
                    
< DataTemplate >
                        
< Button  Content =" {Binding Name} "  Margin ="5"  Foreground ="White"  Background ="Black"  Width ="25"  VerticalAlignment ="Center"  Click ="Button_Click" />
                    
</ DataTemplate >
                
</ ItemsControl.ItemTemplate >

                
< ItemsControl.ItemsPanel >
                    
< ItemsPanelTemplate >
                        
< WrapPanel />
                    
</ ItemsPanelTemplate >
                
</ ItemsControl.ItemsPanel >

            
</ ItemsControl >

            
< TextBlock  VerticalAlignment ="Center" >
                
                
< TextBlock  Text ="【共" />
                
< TextBlock  Text =" {Binding Total} "  Foreground ="Red" />
                
< TextBlock  Text ="页】" />
                
                
< TextBlock  Text ="【当前" />
                
< TextBlock  Text =" {Binding Currentsize} "  Foreground ="Red" />
                
< TextBlock  Text ="页】" />
                
            
</ TextBlock >

        
</ StackPanel >

    
</ Grid >
</ Window >
复制代码

 

【后台页面】

 

复制代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.Windows;
using  System.Windows.Controls;
using  System.Windows.Data;
using  System.Windows.Documents;
using  System.Windows.Input;
using  System.Windows.Media;
using  System.Windows.Media.Imaging;
using  System.Windows.Navigation;
using  System.Windows.Shapes;

namespace  LinqPager
{
    
///   <summary>
    
///  标识:【BruceT】
    
///  日期:【2010.11.10】
    
///   </summary>
     public   partial   class  Window1 : Window
    {

        ViewMode viewmode 
=   new  ViewMode();

        
public  Window1()
        {
            InitializeComponent();

            
this .DataContext  =  viewmode;
        }

        
private   void  Button_Click( object  sender, RoutedEventArgs e)
        {
            viewmode.Fun_Pager(((sender 
as  Button).DataContext  as  Page).PageSize);
        }
    }
  
}
复制代码

 

【ViewMode】

 

复制代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;
using  System.ComponentModel;

namespace  LinqPager
{
    
///   <summary>
    
///  标识:【BruceT】
    
///  日期:【2010.11.10】
    
///  描述:【ViewMode】
    
///   </summary>
     public   class  ViewMode : INotifyPropertyChanged
    {
        
private   int  _number;

        
public   int  Number
        {
            
get  {  return  _number; }
            
set  { _number  =  value; NotifyPropertyChanged( " Number " ); }
        }

        
private   int  _currentsize;

        
public   int  Currentsize
        {
            
get  {  return  _currentsize; }
            
set  { _currentsize  =  value; NotifyPropertyChanged( " Currentsize " ); }
        }

        
private   int  _total;

        
public   int  Total
        {
            
get  {  return  _total; }
            
set  { _total  =  value; NotifyPropertyChanged( " Total " ); }
        }

        
private  List < Page >  _pages;

        
public  List < Page >  Pages
        {
            
get  {  return  _pages; }
            
set  { _pages  =  value; NotifyPropertyChanged( " Pages " ); }
        }

        
private  List < User >  _lst_user;

        
public  List < User >  Lst_user
        {
            
get  {  return  _lst_user; }
            
set  { _lst_user  =  value; NotifyPropertyChanged( " Lst_user " ); }
        }

        
private  List < User >  _lst_bind;

        
public  List < User >  Lst_bind
        {
            
get  {  return  _lst_bind; }
            
set  { _lst_bind  =  value; NotifyPropertyChanged( " Lst_bind " ); }
        }


        
#region  INotifyPropertyChanged 成员

        
public   event  PropertyChangedEventHandler PropertyChanged;
        
public   void  NotifyPropertyChanged( string  PropertyName)
        {
            
if  (PropertyChanged  !=   null )
            {
                PropertyChanged(
this new  PropertyChangedEventArgs(PropertyName));
            }
        }
        
#endregion


        
public  ViewMode()
        {
            
this .Number  =   50 // 设置每页显示数目


            
this .Lst_user  =   new  List < User > (); // 初始化数据
             for  ( int  i  =   0 ; i  <   1000 ; i ++ )
            {
                Lst_user.Add(
new  User { Name  =   " A "   +  i.ToString(), Age  =  i, Address  =   " 哈尔滨 "   +  i });
            }


            
this .Total  =  Lst_user.Count()  /   this .Number  +   1 // 获得总页数,这块算法有些问题 这块应该加判断,这块可以价格取余判断。

            
this .Pages  =   new  List < Page > ();  // 初始所有页数数组
             for  ( int  i  =   1 ; i  <=   this .Total; i ++ )
            {
                
this .Pages.Add( new  Page { Name  =  i.ToString(), PageSize  =  i });
            }

            
this .Currentsize  =   1 ; // 设置当前显示页面

            Fun_Pager(
this .Currentsize);

        }

        
///   <summary>
        
///  分页方法
        
///   </summary>
        
///   <param name="PageSize"></param>
         public   void  Fun_Pager( int  Currentsize)
        {
            
this .Currentsize  =  Currentsize;
            
this .Lst_bind  =   this .Lst_user.Take( this .Number  *   this .Currentsize).Skip( this .Number  *  ( this .Currentsize  -   1 )).ToList();

        }
    }

    
public   class  User
    {
        
public   string  Name 
        { 
get set ; }
        
public   int  Age 
        { 
get set ; }
        
public   string  Address 
        { 
get set ; }
    }

    
public   class  Page
    {
        
public   string  Name 
        { 
get set ; }
        
public   int  PageSize 
        { 
get set ; }
    }
}
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值