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

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(
thisnew 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 
        { 
getset; }
        
public int Age 
        { 
getset; }
        
public string Address 
        { 
getset; }
    }

    
public class Page
    {
        
public string Name 
        { 
getset; }
        
public int PageSize 
        { 
getset; }
    }
}

代码没有整理请谅解。

原文地址:https://www.cnblogs.com/tongly/p/1873881.html