/
naz_number
/
InventoryApp
Обзор
Документация
Войти
/
naz_number
/
InventoryApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ViewModels/EmployeeViewModel.cs
119 строк
3 KB
Nazar Melnik
.
17 дек 2025, 18:15
17 дек 2025, 18:15
08e56ae
Код
Авторство
О чём код?
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 EmployeeViewModel : INotifyPropertyChanged { private readonly ObservableCollection<Employee> _allEmployees = new(); private ObservableCollection<Employee> _employees = new(); private bool _isAsc = true; private string? _searchText; public ObservableCollection<Employee> Employees { get => _employees; set { if (!Equals(_employees, value)) { _employees = value; OnPropertyChanged(); OnPropertyChanged(nameof(TotalRecords)); } } } public int TotalRecords => Employees?.Count ?? 0; public string SortButtonText => _isAsc ? "Сначала А-Я" : "Сначала Я-А"; public string? SearchText { get => _searchText; set { if (_searchText != value) { _searchText = value; OnPropertyChanged(); ApplyFilters(); } } } public ICommand OrderByCommand { get; } public EmployeeViewModel() { using var db = new InventoryTechparkContext(); var employees = db.Employees .Include(e => e.Post) .OrderBy(e => e.Fio) .ToList(); foreach (var e in employees) { _allEmployees.Add(e); } ApplyFilters(); OrderByCommand = new RelayCommand(ExecuteOrderByCommand); } private void ExecuteOrderByCommand(object? parameter) { _isAsc = !_isAsc; ApplyFilters(); OnPropertyChanged(nameof(SortButtonText)); } /// <summary> /// Удаление сотрудника из локальной коллекции и обновление списка. /// </summary> public void RemoveEmployee(int employeeId) { var item = _allEmployees.FirstOrDefault(e => e.Id == employeeId); if (item != null) { _allEmployees.Remove(item); ApplyFilters(); } } private void ApplyFilters() { var query = _allEmployees.AsEnumerable(); if (!string.IsNullOrWhiteSpace(_searchText)) { var text = _searchText.Trim().ToLowerInvariant(); query = query.Where(e => (e.Fio ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Email ?? string.Empty).ToLowerInvariant().Contains(text) || (e.PhoneNumber ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Login ?? string.Empty).ToLowerInvariant().Contains(text) || (e.Post?.Name ?? string.Empty).ToLowerInvariant().Contains(text)); } query = _isAsc ? query.OrderBy(e => e.Fio) : query.OrderByDescending(e => e.Fio); Employees = new ObservableCollection<Employee>(query.ToList()); } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }