using BPASmartClient.FoodStationTest.Model; using BPASmartClient.Helper; using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Mvvm.Input; using System.Collections.ObjectModel; using System.Linq; namespace BPASmartClient.FoodStationTest.ViewModel { internal class SelectRecipesViewModel : ObservableObject { public SelectRecipesViewModel() { AllRecipes = new(); foreach (var item in Json<LocalRecipeDataColl>.Data.SelectedRecipes) { SelectRecipes.Add(item); } if (Json<LocalRecipeDataColl>.Data.Recipes != null) { foreach (var item in Json<LocalRecipeDataColl>.Data.Recipes) { AllRecipes.Add(new RecipeDataWithCheck() { Recipe = item, IsSelected = SelectRecipes.Any(p => p.RecipeCode == item.RecipeCode) }); } } ConfirmCommand = new(() => { RefreshSelected(); ActionManage.GetInstance.Send("CloseSelectRecipesView"); }); CancelCommand = new(() => { ActionManage.GetInstance.Send("CloseSelectRecipesView"); }); AllSelectCommand = new(() => { foreach (var item in AllRecipes) { item.IsSelected = true; } }); AllCancelCommand = new(() => { foreach (var item in AllRecipes) { item.IsSelected = false; } }); } private void RefreshSelected() { SelectRecipes.Clear(); foreach (var item in AllRecipes) { if (item.IsSelected == true) { SelectRecipes.Add(item.Recipe); } } } public ObservableCollection<RecipeDataWithCheck> AllRecipes { get; set; } public static ObservableCollection<RemoteRecipeData> SelectRecipes { get; set; } = new ObservableCollection<RemoteRecipeData>(); /// <summary> /// 取消筛选,即关闭本窗口。 /// </summary> public RelayCommand CancelCommand { get; set; } /// <summary> /// 全选。 /// </summary> public RelayCommand AllSelectCommand { get; set; } /// <summary> /// 全部取消选择。 /// </summary> public RelayCommand AllCancelCommand { get; set; } /// <summary> /// 确认选择。 /// </summary> public RelayCommand ConfirmCommand { get; set; } internal class RecipeDataWithCheck : ObservableObject { public RemoteRecipeData Recipe { get; set; } private bool _IsSelected; public bool IsSelected { get { return _IsSelected; } set { _IsSelected = value; OnPropertyChanged(); } } } } }