/
naz_number
/
InventoryApp
Обзор
Документация
Войти
/
naz_number
/
InventoryApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ViewModels/LocationViewModel.cs
129 строк
4 KB
Nazar Melnik
есть кнопка удаления
19 дек 2025, 13:02
19 дек 2025, 13:02
703bb08
Код
Авторство
О чём код?
using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Windows.Input; using InventoryApp.Models; namespace InventoryApp.ViewModels; public class LocationViewModel : INotifyPropertyChanged { private readonly ObservableCollection<LocationItem> _allLocations = new(); private ObservableCollection<LocationItem> _locations = new(); private bool _isAsc = true; private string? _searchText; public ObservableCollection<LocationItem> Locations { get => _locations; set { if (!Equals(_locations, value)) { _locations = value; OnPropertyChanged(); OnPropertyChanged(nameof(TotalRecords)); } } } public int TotalRecords => Locations?.Count ?? 0; public string SortButtonText => _isAsc ? "Сначала А-Я" : "Сначала Я-А"; public string? SearchText { get => _searchText; set { if (_searchText != value) { _searchText = value; OnPropertyChanged(); ApplyFilters(); } } } public ICommand OrderByCommand { get; } public LocationViewModel() { using var db = new InventoryTechparkContext(); var locations = db.Locations .Select(l => new LocationItem { Id = l.Id, Building = l.Building ?? string.Empty, RoomNumber = l.RoomNumber ?? string.Empty, EquipmentCount = l.Equipment.Count }) .OrderBy(l => l.Building) .ThenBy(l => l.RoomNumber) .ToList(); foreach (var l in locations) { _allLocations.Add(l); } ApplyFilters(); OrderByCommand = new RelayCommand(ExecuteOrderByCommand); } private void ExecuteOrderByCommand(object? parameter) { _isAsc = !_isAsc; ApplyFilters(); OnPropertyChanged(nameof(SortButtonText)); } private void ApplyFilters() { var query = _allLocations.AsEnumerable(); if (!string.IsNullOrWhiteSpace(_searchText)) { var text = _searchText.Trim().ToLowerInvariant(); query = query.Where(l => l.Building.ToLowerInvariant().Contains(text) || l.RoomNumber.ToLowerInvariant().Contains(text)); } query = _isAsc ? query.OrderBy(l => l.Building).ThenBy(l => l.RoomNumber) : query.OrderByDescending(l => l.Building).ThenByDescending(l => l.RoomNumber); Locations = new ObservableCollection<LocationItem>(query.ToList()); } /// <summary> /// Удаление локации из локальной коллекции и обновление списка. /// </summary> public void RemoveLocation(int locationId) { var item = _allLocations.FirstOrDefault(l => l.Id == locationId); if (item != null) { _allLocations.Remove(item); ApplyFilters(); } } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } public class LocationItem { public int Id { get; set; } public string Building { get; set; } = string.Empty; public string RoomNumber { get; set; } = string.Empty; public int EquipmentCount { get; set; } }