using System; using System.Collections.Generic; using System.ComponentModel; using System.Data.Entity; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace Ageev_Exam_Tour.Model { internal class HotelList : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; // Take All Lines from DB List hotelList; public List ListOfHotel { get => hotelList; set { hotelList = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ListOfHotel))); } } // Take the only part List chosenHotels; public List ChoosenHotels { get => chosenHotels; set { chosenHotels = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(ChoosenHotels))); } } // The current page private int _currentPage; public int CurrentPage { get => _currentPage; set{ _currentPage = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(CurrentPage))); NavigationOfHotels(); } } // All pages private int _numberOfPage; public int NumberOfPage { get => _numberOfPage; set{ _numberOfPage = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(NumberOfPage))); } } // Index of array of pageItems private int _selectedRecord; public int SelectedRecord { get => _selectedRecord; set { _selectedRecord = value; PropertyChanged.Invoke(this, new PropertyChangedEventArgs(nameof(SelectedRecord))); ChangeElementsAndPages(); if (CurrentPage > NumberOfPage) CurrentPage = NumberOfPage; NavigationOfHotels(); } } // Our pages there private int[] pageItems; public int[] PagetItems { get => pageItems; } public HotelList() { hotelList = GeneralData.myDataBase.Hotel.ToList(); pageItems = new int[] { 10, 15, 20, 25 }; // set as default 10 elements from DB _selectedRecord = 0; chosenHotels = hotelList.Take(pageItems[SelectedRecord] ).ToList(); // Sets the page where we are _currentPage = 1; // Sets the default of Items _numberOfPage = (int)Math.Ceiling((decimal) hotelList.Count() / (decimal)pageItems[NumberOfPage]); } public void ChangeElementsAndPages() { // Update the choosen element ChoosenHotels = ListOfHotel.Take(pageItems[SelectedRecord]).ToList(); // Update the number of page NumberOfPage = (int)Math.Ceiling((decimal)ListOfHotel.Count() / (decimal)pageItems[SelectedRecord]); } private void NavigationOfHotels() { ChoosenHotels = ListOfHotel. Skip( (CurrentPage-1) * pageItems[SelectedRecord]).Take(pageItems[SelectedRecord]).ToList(); } } }