You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4C/Gumming/Modules/System/pagerControlViewModule.cs

204 lines
6.6 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Input;
using GummingCommon;
namespace Gumming
{
public class PagerControlViewModule: ViewModelBase
{
public PagerControlView View { get; set; }
public delegate void PagerHandler(int currentpagenumber, int currentrows);
public event PagerHandler OnPager;
private ViewProperty<int> _CurrentPageIndex = new ViewProperty<int>(1);
public int CurrentPageIndex
{
get { return _CurrentPageIndex.Value; }
set { if (_CurrentPageIndex.Value != value) _CurrentPageIndex.Value = value; this.OnPropertyChanged("CurrentPageIndex"); }
}
private int _TotalPages = 1;
public int TotalPages
{
get { return _TotalPages; }
set { if (_TotalPages != value) _TotalPages = value; this.OnPropertyChanged("TotalPages"); }
}
private int records = 0;
private int counts = 0;
public ICommand FirstCommand { get; set; }
public ICommand PreviousCommand { get; set; }
public ICommand NextCommand { get; set; }
public ICommand LastCommand { get; set; }
private bool _FirstIsEnabled = false;
public bool FirstIsEnabled
{
get { return _FirstIsEnabled; }
set { if (_FirstIsEnabled != value) _FirstIsEnabled = value; this.OnPropertyChanged("FirstIsEnabled"); }
}
private bool _PreviousIsEnabled = false;
public bool PreviousIsEnabled
{
get { return _PreviousIsEnabled; }
set { if (_PreviousIsEnabled != value) _PreviousIsEnabled = value; this.OnPropertyChanged("PreviousIsEnabled"); }
}
private bool _NextIsEnabled = false;
public bool NextIsEnabled
{
get { return _NextIsEnabled; }
set { if (_NextIsEnabled != value) _NextIsEnabled = value; this.OnPropertyChanged("NextIsEnabled"); }
}
private bool _LastIsEnabled = false;
public bool LastIsEnabled
{
get { return _LastIsEnabled; }
set { if (_LastIsEnabled != value) _LastIsEnabled = value; this.OnPropertyChanged("LastIsEnabled"); }
}
private bool _PageIsEnabled = false;
public bool PageIsEnabled
{
get { return _PageIsEnabled; }
set { if (_PageIsEnabled != value) _PageIsEnabled = value; this.OnPropertyChanged("PageIsEnabled"); }
}
private string _PagerInfo1;
public string PagerInfo1
{
get { return _PagerInfo1; }
set { if (_PagerInfo1 != value) _PagerInfo1 = value; this.OnPropertyChanged("PagerInfo1"); }
}
private string _TotalInfo;
public string TotalInfo
{
get { return _TotalInfo; }
set { if (_TotalInfo != value) _TotalInfo = value; this.OnPropertyChanged("TotalInfo"); }
}
public IEnumerable<int> PagerRows
{
get;
set;
}
private ViewProperty<int> _CurrentPagerRows = new ViewProperty<int>();
public int CurrentPagerRows
{
get { return _CurrentPagerRows.Value; }
set
{
if (_CurrentPagerRows.Value == value)
return;
_CurrentPagerRows.Value = value;
OnPropertyChanged("CurrentPagerRows");
}
}
public PagerControlViewModule()
{
View = new PagerControlView();
View.DataContext = this;
PageIsEnabled = false;
IList<int> pagerNumbers = new List<int>() { 10, 20, 50, 100 };
PagerRows = pagerNumbers;
FirstCommand = new DelegateCommand(OnFirstCommand);
PreviousCommand = new DelegateCommand(OnPreviousCommand);
NextCommand = new DelegateCommand(OnNextCommand);
LastCommand = new DelegateCommand(OnLastCommand);
_CurrentPagerRows.ValueChanged += new Action(_CurrentPagerRows_ValueChanged);
_CurrentPageIndex.ValueChanged += new Action(_CurrentPageIndex_ValueChanged);
}
private void _CurrentPageIndex_ValueChanged()
{
if (OnPager != null)
{
OnPager(CurrentPageIndex, CurrentPagerRows);
}
}
private void _CurrentPagerRows_ValueChanged()
{
if (CurrentPageIndex == 1)
{
if (OnPager != null)
{
OnPager(CurrentPageIndex, CurrentPagerRows);
}
}
else
{
CurrentPageIndex = 1;
}
}
public void SetPager(int _rows, int _pagenumber, int _pagecount, int _counts , int _records)
{
CurrentPagerRows = _rows;
if (!PagerRows.Contains(_rows))
{
IList<int> pagerNumbers = PagerRows.ToList();
pagerNumbers.Add(_rows);
PagerRows = pagerNumbers;
OnPropertyChanged("PagerRows");
}
CurrentPageIndex = _pagenumber;
TotalPages = _pagecount;
records = _records;
counts = _counts;
SetStatus();
PageIsEnabled = true;
}
private void OnFirstCommand(object sender)
{
CurrentPageIndex = 1;
SetStatus();
}
private void OnPreviousCommand(object sender)
{
CurrentPageIndex = CurrentPageIndex - 1;
SetStatus();
}
private void OnNextCommand(object sender)
{
CurrentPageIndex = CurrentPageIndex + 1;
SetStatus();
}
private void OnLastCommand(object sender)
{
CurrentPageIndex = TotalPages;
SetStatus();
}
private void SetStatus()
{
if (CurrentPageIndex <= 1)
{
FirstIsEnabled = false;
PreviousIsEnabled = false;
}
else
{
FirstIsEnabled = true;
PreviousIsEnabled = true;
}
if (CurrentPageIndex >= TotalPages)
{
NextIsEnabled = false;
LastIsEnabled = false;
}
else
{
NextIsEnabled = true;
LastIsEnabled = true;
}
TotalInfo = string.Format("当前页面记录{0}/共{1}条记录", counts, records);
}
}
}