BathhouseManagment/ViewModels/UserControlViewModels/ServiceViewModel.cs

84 lines
2.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using BathHouseManagmet.Database;
using BathHouseManagmet.Models;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
namespace BathHouseManagmet.ViewModels;
public partial class ServiceViewModel : ViewModelBase
{
private readonly IServiceProvider _serviceProvider;
[ObservableProperty] ObservableCollection<Service> services;
[ObservableProperty] int _currentPageSize;
[ObservableProperty] List<int> _pageSizes;
[ObservableProperty] string _pageInfo;
private int totalPages;
private int currentPage = 0;
public ServiceViewModel(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
using (var rep = _serviceProvider.GetRequiredService<ServiceRepository>())
Services = new ObservableCollection<Service>(rep.GetPage());
PageSizes = new List<int>([5, 10, 15]);
CurrentPageSize = PageSizes.First();
}
partial void OnCurrentPageSizeChanged(int value)
{
CalculatePage();
}
void CalculatePage()
{
using var db = new DiscountRepository();
var rowsCount = db.GetRowsCount();
totalPages = (int)Math.Ceiling(((double)rowsCount / CurrentPageSize));
ShowFirstPage();
}
void ShowPage(int pageIndex)
{
currentPage = pageIndex;
using var db = new ServiceRepository();
Services.Clear();
var rows = db.GetPage(pageIndex, CurrentPageSize);
rows.ForEach(s => services.Add(s));
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);
}
}