BathhouseManagment/ViewModels/UserControlViewModels/PositionViewModel.cs

87 lines
2.3 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 PositionViewModel : ViewModelBase
{
private readonly IServiceProvider _serviceProvider;
[ObservableProperty] ObservableCollection<Position> _positions;
[ObservableProperty] int _currentPageSize;
[ObservableProperty] List<int> _pageSizes;
[ObservableProperty] string pageInfo;
private int currentPage = 0;
private int totalPages;
public PositionViewModel(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
using (var rep = _serviceProvider.GetRequiredService<PositionRepository>())
Positions = new ObservableCollection<Position>(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 PositionRepository();
Positions.Clear();
using (var rep = _serviceProvider.GetRequiredService<PositionRepository>())
{
var rows = db.GetPage(pageIndex, CurrentPageSize);
rows.ForEach(p => Positions.Add(p));
}
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);
}
}