using System; using System.Collections.Generic; using System.Linq; using BathHouseManagmet.Database; using BathHouseManagmet.Models; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; namespace BathHouseManagmet.ViewModels; public partial class OrderViewModel : ViewModelBase { private readonly IServiceProvider _serviceProvider; private readonly OrderRepository _repository; [ObservableProperty] private int _currentPageSize; [ObservableProperty] private List _pageSizes; [ObservableProperty] private string _pageInfo; private int currentPage = 0; private int totalPages; [ObservableProperty] List orders; public OrderViewModel(IServiceProvider serviceProvider, OrderRepository repository) { _serviceProvider = serviceProvider; _repository = repository; PageSizes = new List([5,10,20]); CurrentPageSize = PageSizes.First(); } partial void OnCurrentPageSizeChanged(int value) { CalculatePages(); } void CalculatePages() { using var db = new OrderRepository(); var rowsCount = db.GetRowsCount(); totalPages = (int)Math.Ceiling(((double)rowsCount / CurrentPageSize)); ShowFirstPage(); } void ShowPage(int pageIndex) { currentPage = pageIndex; using var db = new OrderRepository(); Orders.Clear(); var rows = db.GetPage(pageIndex, CurrentPageSize); rows.ForEach(o => Orders.Add(o)); PageInfo = $"Страница {currentPage + 1} из {totalPages}"; } [RelayCommand] private void ShowFirstPage() { ShowPage(0); } [RelayCommand] private void ShowLastPage() { ShowPage(totalPages - 1); } [RelayCommand] private void ShowNextPage() { if (currentPage < totalPages - 1) ShowPage(currentPage + 1); } [RelayCommand] private void ShowPreviousPage() { if (currentPage > 0) ShowPage(currentPage - 1); } }