using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using Lagerprogramm.Models; namespace Lagerprogramm.ViewModels; public class PartSearchDialogViewModel : INotifyPropertyChanged { private readonly ObservableCollection _allParts; private readonly ObservableCollection _filteredParts; private string _searchText = string.Empty; private Part? _selectedPart; public ObservableCollection FilteredParts => _filteredParts; public Part? SelectedPart { get => _selectedPart; set { _selectedPart = value; OnPropertyChanged(); } } public string SearchText { get => _searchText; set { _searchText = value; FilterParts(); OnPropertyChanged(); } } public PartSearchDialogViewModel(IEnumerable parts) { _allParts = new ObservableCollection(parts); _filteredParts = new ObservableCollection(_allParts); } private void FilterParts() { _filteredParts.Clear(); if (string.IsNullOrWhiteSpace(SearchText)) { foreach (var part in _allParts) _filteredParts.Add(part); return; } var query = SearchText.ToLower(); var matches = _allParts.Where(p => p.InternalPartNumber.ToLower().Contains(query) || p.ManufacturerPartNumber.ToLower().Contains(query) || p.Ean.ToLower().Contains(query) || p.SupplierPartNumber.ToLower().Contains(query) || p.Manufacturer.ToLower().Contains(query) || p.Supplier.ToLower().Contains(query) || p.Description.ToLower().Contains(query) ).ToList(); foreach (var part in matches) _filteredParts.Add(part); } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }