Files
lagerprogramm/ViewModels/PartSearchDialogViewModel.cs
joel.leirer fb1f90a9ca Added Slop
2026-08-25 17:14:54 +02:00

74 lines
2.1 KiB
C#

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<Part> _allParts;
private readonly ObservableCollection<Part> _filteredParts;
private string _searchText = string.Empty;
private Part? _selectedPart;
public ObservableCollection<Part> FilteredParts => _filteredParts;
public Part? SelectedPart
{
get => _selectedPart;
set
{
_selectedPart = value;
OnPropertyChanged();
}
}
public string SearchText
{
get => _searchText;
set
{
_searchText = value;
FilterParts();
OnPropertyChanged();
}
}
public PartSearchDialogViewModel(IEnumerable<Part> parts)
{
_allParts = new ObservableCollection<Part>(parts);
_filteredParts = new ObservableCollection<Part>(_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));
}