123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace practica12.Classs
- {
- internal class Pagin : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged; //событие, для изменения значения одного из массивов свойств, описанных ниже
- static int countitems = 5; //количество объектов для отображения (1 2 3 4 5)
- public int[] NPage { get; set; } = new int[countitems];// массив с номерами отображаемых страниц
- public string[] Visible { get; set; } = new string[countitems];//массив свойст, отвечающий за видимость номера страницы, Visible - видимый, Hidden - скрытый
- public string[] Bold { get; set; } = new string[countitems];//массив свойств, отвечающий за выделение номера текущей страницы
- int countpages; // переменная, в которой буде храниться количество страниц
- public int CountPages//свойство в котором хранится общее кол-во страц, при изменении данного свойства будет определяться, скрыт будет номер той или итой страницы или нет (в зависимости об общего кол-ва записей в списке)
- {
- get => countpages;
- set
- {
- countpages = value;
- for (int i = 1; i < countitems; i++)//цикл для определения видимости номеров страниц
- {
- if (CountPages <= i)
- {
- Visible[i] = "Hidden";//если страниц меньше, чем кнопок - скрываем лишние
- }
- else
- {
- Visible[i] = "Visible";// а если их опять стало больше, то показываем назад
- }
- }
- }
- }
- int countpage;//количество записей на странице
- public int CountPage //свойство, в котором хранится количество записей на странице, при изменении данного свойства будет изменяться общее количесво страниц для отображения
- {
- get => countpage;
- set
- {
- countpage = value;
- if (Countlist % value == 0)
- {
- CountPages = Countlist / value;//определение количества страниц
- }
- else
- {
- CountPages = Countlist / value + 1;//в случае нецелого числа прибавляем 1 к итоговому количеству страниц
- }
- }
- }
- int countlist; // количество записей в списке
- public int Countlist //свойство, в котором хранится общее количество записей в списке, при изменении данного свойства будет изменяться общее количесво страниц для отображения
- {
- get => countlist;
- set
- {
- countlist = value;
- if (value % CountPage == 0)
- {
- CountPages = value / CountPage;//определение количества страниц
- }
- else
- {
- CountPages = 1 + value / CountPage;
- }
- }
- }
- int currentpage;//текущая страница
- public int CurrentPage // свойство, в котором будет хранится текущая страница, при изменении которого будет меняться вся отрисовка меню с номерами страниц
- {
- get => currentpage;
- set
- {
- currentpage = value;
- if (currentpage < 1)
- {
- currentpage = 1;
- }
- if (currentpage >= CountPages)
- {
- currentpage = CountPages;
- }
- //отрисовка меню с номерами страниц, рассмотрим три возможных случая
- for (int i = 0; i < countitems; i++)
- {
- if (currentpage < (1 + countitems / 2) || CountPages < countitems) NPage[i] = i + 1;//если страница в начале списка
- else if (currentpage > CountPages - (countitems / 2 + 1)) NPage[i] = CountPages - (countitems - 1) + i;//если страница в конце списка
- else NPage[i] = currentpage + i - (countitems / 2);//если страница в середине списка
- }
- for (int i = 0; i < countitems; i++)//выделяем активную страницу жирным
- {
- if (NPage[i] == currentpage) Bold[i] = "ExtraBold";
- else Bold[i] = "Regular";
- }
- //вызываем созбытие, связанное с изменением свойств, используемых в привязке на странице
- PropertyChanged(this, new PropertyChangedEventArgs("NPage"));
- PropertyChanged(this, new PropertyChangedEventArgs("Visible"));
- PropertyChanged(this, new PropertyChangedEventArgs("Bold"));
- }
- }
- public Pagin() // контруктор
- {
- for (int i = 0; i < countitems; i++) // показываем исходное меню ( 1 2 3 4 5)
- {
- if (i == 0)
- {
- Visible[i] = "Visible";
- Bold[i] = "ExtraBold";
- }
- else
- {
- Visible[i] = "Hidden";
- Bold[i] = "Regular";
- }
- NPage[i] = i + 1;
- }
- currentpage = 1; // по умолчанию 1-ая страница будет текущей
- countlist = 1; // по умолчанию в общем списке будет только одна запись
- countpage = 10;
- }
- }
- }
|