DynamicEnclosedEditorControl.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System.Collections.Generic;
  2. using System.ComponentModel;
  3. using System.Windows;
  4. using System.Windows.Media;
  5. using InABox.Core;
  6. namespace InABox.DynamicGrid
  7. {
  8. public abstract class DynamicEnclosedEditorControl<T, TEditor> : BaseDynamicEditorControl<TEditor>
  9. where T : IEnclosedEntity
  10. where TEditor : BaseEditor
  11. {
  12. protected bool Updating;
  13. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  14. public override bool Changed { get; set; }
  15. public override event EditorControlValueChangedHandler? OnEditorValueChanged;
  16. [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
  17. protected virtual Dictionary<string, object?> OtherValues { get; }
  18. public DynamicEnclosedEditorControl()
  19. {
  20. Loaded = false;
  21. OtherValues = new();
  22. MinHeight = 25;
  23. Focusable = false;
  24. }
  25. protected virtual bool CheckChanged()
  26. {
  27. //Logger.Send(LogType.Information, "", string.Format("{0}({1}).CheckChanged()", GetType().EntityName().Split('.').Last(), ColumnName));
  28. if (Loaded && !Updating)
  29. {
  30. Updating = true;
  31. try
  32. {
  33. var values = new Dictionary<string, object>();
  34. var sColumn = string.IsNullOrEmpty(ColumnName) ? "" : ColumnName;
  35. foreach(var (k, v) in GetValues())
  36. {
  37. values[k] = v;
  38. }
  39. foreach (var key in OtherValues.Keys)
  40. values[key] = OtherValues[key];
  41. OnEditorValueChanged?.Invoke(this, values);
  42. }
  43. finally
  44. {
  45. Changed = true;
  46. Updating = false;
  47. }
  48. }
  49. return Changed;
  50. }
  51. public override void SetEnabled(bool enabled)
  52. {
  53. if(Content is FrameworkElement element) element.IsEnabled = enabled;
  54. SetColor(enabled ? Color : Colors.WhiteSmoke);
  55. }
  56. public override void SetVisible(bool visible)
  57. {
  58. Visibility = visible ? Visibility.Visible : Visibility.Collapsed;
  59. }
  60. }
  61. }