using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using Lagerprogramm.Models; namespace Lagerprogramm.ViewModels; public class AdditionSearchDialogViewModel : INotifyPropertyChanged { private readonly ObservableCollection _allAdditions; private readonly ObservableCollection _filteredAdditions; private string _searchText = string.Empty; private Addition? _selectedAddition; public ObservableCollection FilteredAdditions => _filteredAdditions; public Addition? SelectedAddition { get => _selectedAddition; set { _selectedAddition = value; OnPropertyChanged(); } } public string SearchText { get => _searchText; set { _searchText = value; FilterAdditions(); OnPropertyChanged(); } } public AdditionSearchDialogViewModel(ObservableCollection additions) { _allAdditions = additions; _filteredAdditions = new ObservableCollection(additions); } private void FilterAdditions() { _filteredAdditions.Clear(); if (string.IsNullOrWhiteSpace(SearchText)) { foreach (var a in _allAdditions) _filteredAdditions.Add(a); return; } var query = SearchText.ToLower(); var matches = _allAdditions.Where(a => a.Comment.ToLower().Contains(query) || a.Date.ToString("yyyy-MM-dd").Contains(query) || a.Lines.Any(l => l.PartInternalNumber.ToLower().Contains(query)) ).ToList(); foreach (var a in matches) _filteredAdditions.Add(a); } public event PropertyChangedEventHandler? PropertyChanged; protected void OnPropertyChanged([CallerMemberName] string? name = null) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); }