Pagin.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace practica12.Classs
  8. {
  9. internal class Pagin : INotifyPropertyChanged
  10. {
  11. public event PropertyChangedEventHandler PropertyChanged; //событие, для изменения значения одного из массивов свойств, описанных ниже
  12. static int countitems = 5; //количество объектов для отображения (1 2 3 4 5)
  13. public int[] NPage { get; set; } = new int[countitems];// массив с номерами отображаемых страниц
  14. public string[] Visible { get; set; } = new string[countitems];//массив свойст, отвечающий за видимость номера страницы, Visible - видимый, Hidden - скрытый
  15. public string[] Bold { get; set; } = new string[countitems];//массив свойств, отвечающий за выделение номера текущей страницы
  16. int countpages; // переменная, в которой буде храниться количество страниц
  17. public int CountPages//свойство в котором хранится общее кол-во страц, при изменении данного свойства будет определяться, скрыт будет номер той или итой страницы или нет (в зависимости об общего кол-ва записей в списке)
  18. {
  19. get => countpages;
  20. set
  21. {
  22. countpages = value;
  23. for (int i = 1; i < countitems; i++)//цикл для определения видимости номеров страниц
  24. {
  25. if (CountPages <= i)
  26. {
  27. Visible[i] = "Hidden";//если страниц меньше, чем кнопок - скрываем лишние
  28. }
  29. else
  30. {
  31. Visible[i] = "Visible";// а если их опять стало больше, то показываем назад
  32. }
  33. }
  34. }
  35. }
  36. int countpage;//количество записей на странице
  37. public int CountPage //свойство, в котором хранится количество записей на странице, при изменении данного свойства будет изменяться общее количесво страниц для отображения
  38. {
  39. get => countpage;
  40. set
  41. {
  42. countpage = value;
  43. if (Countlist % value == 0)
  44. {
  45. CountPages = Countlist / value;//определение количества страниц
  46. }
  47. else
  48. {
  49. CountPages = Countlist / value + 1;//в случае нецелого числа прибавляем 1 к итоговому количеству страниц
  50. }
  51. }
  52. }
  53. int countlist; // количество записей в списке
  54. public int Countlist //свойство, в котором хранится общее количество записей в списке, при изменении данного свойства будет изменяться общее количесво страниц для отображения
  55. {
  56. get => countlist;
  57. set
  58. {
  59. countlist = value;
  60. if (value % CountPage == 0)
  61. {
  62. CountPages = value / CountPage;//определение количества страниц
  63. }
  64. else
  65. {
  66. CountPages = 1 + value / CountPage;
  67. }
  68. }
  69. }
  70. int currentpage;//текущая страница
  71. public int CurrentPage // свойство, в котором будет хранится текущая страница, при изменении которого будет меняться вся отрисовка меню с номерами страниц
  72. {
  73. get => currentpage;
  74. set
  75. {
  76. currentpage = value;
  77. if (currentpage < 1)
  78. {
  79. currentpage = 1;
  80. }
  81. if (currentpage >= CountPages)
  82. {
  83. currentpage = CountPages;
  84. }
  85. //отрисовка меню с номерами страниц, рассмотрим три возможных случая
  86. for (int i = 0; i < countitems; i++)
  87. {
  88. if (currentpage < (1 + countitems / 2) || CountPages < countitems) NPage[i] = i + 1;//если страница в начале списка
  89. else if (currentpage > CountPages - (countitems / 2 + 1)) NPage[i] = CountPages - (countitems - 1) + i;//если страница в конце списка
  90. else NPage[i] = currentpage + i - (countitems / 2);//если страница в середине списка
  91. }
  92. for (int i = 0; i < countitems; i++)//выделяем активную страницу жирным
  93. {
  94. if (NPage[i] == currentpage) Bold[i] = "ExtraBold";
  95. else Bold[i] = "Regular";
  96. }
  97. //вызываем созбытие, связанное с изменением свойств, используемых в привязке на странице
  98. PropertyChanged(this, new PropertyChangedEventArgs("NPage"));
  99. PropertyChanged(this, new PropertyChangedEventArgs("Visible"));
  100. PropertyChanged(this, new PropertyChangedEventArgs("Bold"));
  101. }
  102. }
  103. public Pagin() // контруктор
  104. {
  105. for (int i = 0; i < countitems; i++) // показываем исходное меню ( 1 2 3 4 5)
  106. {
  107. if (i == 0)
  108. {
  109. Visible[i] = "Visible";
  110. Bold[i] = "ExtraBold";
  111. }
  112. else
  113. {
  114. Visible[i] = "Hidden";
  115. Bold[i] = "Regular";
  116. }
  117. NPage[i] = i + 1;
  118. }
  119. currentpage = 1; // по умолчанию 1-ая страница будет текущей
  120. countlist = 1; // по умолчанию в общем списке будет только одна запись
  121. countpage = 10;
  122. }
  123. }
  124. }