HotelList.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data.Entity;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Input;
  11. namespace Ageev_Exam_Tour.Model
  12. {
  13. internal class HotelList : INotifyPropertyChanged
  14. {
  15. public event PropertyChangedEventHandler PropertyChanged;
  16. // Take All Lines from DB
  17. List<Hotel> hotelList;
  18. public List<Hotel> ListOfHotel
  19. {
  20. get => hotelList;
  21. set
  22. {
  23. hotelList = value;
  24. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ListOfHotel)));
  25. }
  26. }
  27. // Take the only part
  28. List<Hotel> chosenHotels;
  29. public List<Hotel> ChoosenHotels
  30. {
  31. get => chosenHotels;
  32. set
  33. {
  34. chosenHotels = value;
  35. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ChoosenHotels)));
  36. }
  37. }
  38. // The current page
  39. private int _currentPage;
  40. public int CurrentPage {
  41. get => _currentPage;
  42. set{
  43. _currentPage = value;
  44. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentPage)));
  45. NavigationOfHotels();
  46. }
  47. }
  48. // All pages
  49. private int _numberOfPage;
  50. public int NumberOfPage
  51. {
  52. get => _numberOfPage;
  53. set{
  54. _numberOfPage = value;
  55. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(NumberOfPage)));
  56. }
  57. }
  58. // Index of array of pageItems
  59. private int _selectedRecord;
  60. public int SelectedRecord {
  61. get => _selectedRecord;
  62. set
  63. {
  64. _selectedRecord = value;
  65. PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedRecord)));
  66. ChangeElementsAndPages();
  67. if (CurrentPage > NumberOfPage)
  68. CurrentPage = NumberOfPage;
  69. NavigationOfHotels();
  70. }
  71. }
  72. // Our pages there
  73. private int[] pageItems;
  74. public int[] PagetItems { get => pageItems; }
  75. public HotelList()
  76. {
  77. hotelList = GeneralData.myDataBase.Hotel.ToList();
  78. pageItems = new int[] { 10, 15, 20, 25 };
  79. // set as default 10 elements from DB
  80. _selectedRecord = 0;
  81. chosenHotels = hotelList.Take(pageItems[SelectedRecord] ).ToList();
  82. // Sets the page where we are
  83. _currentPage = 1;
  84. // Sets the default of Items
  85. _numberOfPage = (int)Math.Ceiling((decimal) hotelList.Count() / (decimal)pageItems[NumberOfPage]);
  86. }
  87. public void ChangeElementsAndPages()
  88. {
  89. // Update the choosen element
  90. ChoosenHotels = ListOfHotel.Take(pageItems[SelectedRecord]).ToList();
  91. // Update the number of page
  92. NumberOfPage = (int)Math.Ceiling((decimal)ListOfHotel.Count() / (decimal)pageItems[SelectedRecord]);
  93. }
  94. private void NavigationOfHotels()
  95. {
  96. ChoosenHotels = ListOfHotel.
  97. Skip( (CurrentPage-1) * pageItems[SelectedRecord]).Take(pageItems[SelectedRecord]).ToList();
  98. }
  99. }
  100. }