DynamicSelectorGrid.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using InABox.Core;
  2. using InABox.WPF;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. using System.Windows.Media.Imaging;
  9. namespace InABox.DynamicGrid;
  10. public class DynamicSelectorGrid<T> : DynamicDataGrid<T>
  11. where T : Entity, IRemotable, IPersistent, new()
  12. {
  13. private static BitmapImage tick = InABox.Wpf.Resources.tick.AsBitmapImage();
  14. public HashSet<Guid> SelectedIDs { get; set; } = new();
  15. public delegate void SelectionChangedEvent(HashSet<Guid> selected);
  16. public event SelectionChangedEvent? SelectionChanged;
  17. public DynamicSelectorGrid(DynamicActionColumnPosition tickPosition)
  18. {
  19. ActionColumns.Add(new DynamicImageColumn(Selected_Image, Selected_Click)
  20. {
  21. Position = tickPosition
  22. });
  23. }
  24. private BitmapImage? Selected_Image(CoreRow? row)
  25. {
  26. if (row is null) return tick;
  27. return SelectedIDs.Contains(row.Get<T, Guid>(x => x.ID)) ? tick : null;
  28. }
  29. private bool Selected_Click(CoreRow? row)
  30. {
  31. if (row is null) return false;
  32. var id = row.Get<T, Guid>(x => x.ID);
  33. if (SelectedIDs.Contains(id))
  34. {
  35. SelectedIDs.Remove(id);
  36. }
  37. else
  38. {
  39. SelectedIDs.Add(id);
  40. }
  41. SelectionChanged?.Invoke(SelectedIDs);
  42. InvalidateRow(row);
  43. return false;
  44. }
  45. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  46. {
  47. base.DoReconfigure(options);
  48. options.Clear();
  49. }
  50. }