using InABox.Core; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Media.Imaging; namespace InABox.DynamicGrid; public class DynamicSelectorGrid : DynamicDataGrid where T : Entity, IRemotable, IPersistent, new() { private static BitmapImage tick = InABox.Wpf.Resources.tick.AsBitmapImage(); public HashSet SelectedIDs { get; set; } = new(); public delegate void SelectionChangedEvent(HashSet selected); public event SelectionChangedEvent? SelectionChanged; public DynamicSelectorGrid(DynamicActionColumnPosition tickPosition) { ActionColumns.Add(new DynamicImageColumn(Selected_Image, Selected_Click) { Position = tickPosition }); } private BitmapImage? Selected_Image(CoreRow? row) { if (row is null) return tick; return SelectedIDs.Contains(row.Get(x => x.ID)) ? tick : null; } private bool Selected_Click(CoreRow? row) { if (row is null) return false; var id = row.Get(x => x.ID); if (SelectedIDs.Contains(id)) { SelectedIDs.Remove(id); } else { SelectedIDs.Add(id); } SelectionChanged?.Invoke(SelectedIDs); InvalidateRow(row); return false; } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.Clear(); } }