74 lines
2.1 KiB
C#
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));
|
|
}
|