/
naz_number
/
InventoryApp
Обзор
Документация
Войти
/
naz_number
/
InventoryApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ViewModels/EquipmentViewModel.cs
140 строк
4 KB
Nazar Melnik
есть кнопка удаления
17 дек 2025, 17:51
17 дек 2025, 17:51
2eeefdb
Код
Авторство
О чём код?
using System; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Windows.Input; using InventoryApp.Models; using Microsoft.EntityFrameworkCore; namespace InventoryApp.ViewModels; public class EquipmentViewModel : INotifyPropertyChanged { private readonly ObservableCollection<Equipment> _allEquipment = new(); private ObservableCollection<Equipment> _equipment = new(); private bool _isOldFirst = false; private string? _searchText; public ObservableCollection<Equipment> EquipmentList { get => _equipment; set { if (!Equals(_equipment, value)) { _equipment = value; OnPropertyChanged(); OnPropertyChanged(nameof(TotalRecords)); } } } /// <summary> /// Общее количество записей в списке. /// </summary> public int TotalRecords => EquipmentList?.Count ?? 0; /// <summary> /// Текст на кнопке сортировки. /// </summary> public string SortButtonText => _isOldFirst ? "Сначала новые" : "Сначала старые"; /// <summary> /// Общая строка поиска. /// </summary> public string? SearchText { get => _searchText; set { if (_searchText != value) { _searchText = value; OnPropertyChanged(); ApplyFilters(); } } } /// <summary> /// Команда сортировки по дате покупки. /// </summary> public ICommand OrderByCommand { get; } public EquipmentViewModel() { using var db = new InventoryTechparkContext(); var equipment = db.Equipment .Include(e => e.Location) .Include(e => e.Employee) .Include(e => e.Status) .Include(e => e.EquipmentType) .OrderByDescending(e => e.PurchaseDate) .ToList(); foreach (var e in equipment) { _allEquipment.Add(e); } ApplyFilters(); OrderByCommand = new RelayCommand(ExecuteOrderByCommand); } private void ExecuteOrderByCommand(object? parameter) { _isOldFirst = !_isOldFirst; ApplyFilters(); OnPropertyChanged(nameof(SortButtonText)); } /// <summary> /// Удаление записи из локальной коллекции и обновление списка. /// </summary> public void RemoveEquipment(int equipmentId) { var item = _allEquipment.FirstOrDefault(e => e.Id == equipmentId); if (item != null) { _allEquipment.Remove(item); ApplyFilters(); } } /// <summary> /// Применение фильтров поиска и сортировки к полной коллекции. /// </summary> private void ApplyFilters() { var query = _allEquipment.AsEnumerable(); if (!string.IsNullOrWhiteSpace(_searchText)) { var text = _searchText.Trim().ToLowerInvariant(); query = query.Where(e => (e.Name ?? string.Empty).ToLowerInvariant().Contains(text) || (e.InventoryNumber?.ToString() ?? string.Empty).ToLowerInvariant().Contains(text) || (e.SerialNumber ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Employee?.Fio ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Location?.Building ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Location?.RoomNumber ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Status?.Name ?? string.Empty).ToLowerInvariant().Contains(text) || (e.EquipmentType?.Name ?? string.Empty).ToLowerInvariant().Contains(text)); } query = _isOldFirst ? query.OrderBy(e => e.PurchaseDate) : query.OrderByDescending(e => e.PurchaseDate); EquipmentList = new ObservableCollection<Equipment>(query.ToList()); } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }