zoukankan      html  css  js  c++  java
  • 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; }
        }
    }

    代码没有整理请谅解。

  • 相关阅读:
    深入理解MySQL开发性能优化.pptx
    公司mysql数据库设计与优化培训ppt
    weblogic 12c下jxls导出excel报错Could not initialize class org.apache.poi.xssf.usermodel.XSSFVMLDrawing
    智软科技医疗器械GSP监管软件通过多省市药监局检查
    论元数据和API管理工具
    sql server 2008空间释放
    论软件系统的设计与开发
    说说IT技术团队招聘那点事
    分布式系统基础设施概览
    分布式环境下rabbitmq发布与订阅端
  • 原文地址:https://www.cnblogs.com/tongly/p/1873881.html
Copyright © 2011-2022 走看看