using System.Collections.ObjectModel; using Seyounth.Hyosung.UI.Models; using System.Windows.Media; using CommunityToolkit.Mvvm.Messaging; using Seyounth.Hyosung.Data.Models; using Seyounth.Hyosung.Data.Services; using Wpf.Ui.Controls; namespace Seyounth.Hyosung.UI.ViewModels.Pages { public partial class DataViewModel : ObservableObject, INavigationAware { public class SavePalletCompletedMessage; [ObservableProperty] private ObservableCollection _varieties; [ObservableProperty] private ObservableCollection _pallets; [ObservableProperty] private ObservableCollection _honeyPallets = new(); [ObservableProperty] private ObservableCollection _paperPallets = new(); [ObservableProperty] private ObservableCollection _trays = new(); private readonly IVarietyService _varietyService; private readonly IPalletService _palletService; public DataViewModel(IVarietyService varietyService, IPalletService palletService) { _varietyService = varietyService; _palletService = palletService; } public void OnNavigatedTo() { Pallets = new ObservableCollection(_palletService.GetPallets()); HoneyPallets = new ObservableCollection(Pallets.Where(p => p.Type == PalletType.Honey)); var papers = Pallets.Where(p => p.Type == PalletType.Paper).ToList(); papers.Add(new Pallet()); papers = papers.OrderBy(p => p.Length).ToList(); PaperPallets = new ObservableCollection(papers); Trays = new ObservableCollection(Pallets.Where(p => p.Type is PalletType.Plywood or PalletType.Wood)); var varieties = _varietyService.GetAll().Select(v => { // 匹配相同ID的托盘对象 v.TopAndBottomPallet = HoneyPallets.FirstOrDefault(p => p.Id == v.TopAndBottomPallet.Id); v.MiddlePallet = HoneyPallets.FirstOrDefault(p => p.Id == v.MiddlePallet.Id); v.Tray = Trays.FirstOrDefault(p => p.Id == v.Tray.Id); v.PaperTray = v.PaperTray is null ? PaperPallets.First() : PaperPallets.FirstOrDefault(p => p.Id == v.PaperTray.Id); return v; }); Varieties = new ObservableCollection(varieties); } public void OnNavigatedFrom() { } [RelayCommand] private void AddVariety() { var variety = new Variety { /* 初始化默认值 */ }; Varieties.Add(variety); } [RelayCommand] private void OnDeleteVariety(object obj) { if (obj is Variety variety) { Varieties.Remove(variety); _varietyService.DeleteVarietyAsync(variety); } else { Console.Write("Object is not a variety"); } } [RelayCommand] private async Task OnSaveVariety(object obj) { if (obj is Variety variety) { await _varietyService.AddVarietyAsync(variety); //Pallets = new ObservableCollection(_palletService.GetPallets()); } WeakReferenceMessenger.Default.Send(new SavePalletCompletedMessage()); } } }