您的位置:首页 > 其它

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

2013-05-14 16:40 423 查看
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; }

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: