MasterDetailPanelPage.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections.Generic;
  2. using InABox.Core;
  3. using InABox.DynamicGrid;
  4. namespace InABox.Wpf;
  5. public interface IMasterDetailPanelPage
  6. {
  7. IBasePanel? Panel { get; }
  8. }
  9. public abstract class MasterDetailPanelPage<TMaster,TPanel> : MasterDetailPage<TMaster>, IMasterDetailPanelPage
  10. where TPanel : class, IBasePanel, IMasterDetailControl<TMaster>, new()
  11. {
  12. protected MasterDetailPanelPage(DynamicTabItem tab) : base(tab) { }
  13. public TPanel? Panel { get; set; }
  14. IBasePanel? IMasterDetailPanelPage.Panel => Panel;
  15. public override Dictionary<string, object[]>? Selected() => Panel?.Selected();
  16. protected abstract void DoRefresh(TPanel? panel);
  17. public override IDataModelSource DataModelSource() => CheckPanel();
  18. protected override IDataModelSource? Refresh()
  19. {
  20. CheckPanel();
  21. DoRefresh(Panel);
  22. return Panel;
  23. }
  24. private IDataModelSource CheckPanel()
  25. {
  26. if (Panel == null)
  27. {
  28. Panel = new TPanel
  29. {
  30. IsReady = false
  31. };
  32. Panel.Setup();
  33. Panel.IsReady = true;
  34. Tab.Content = Panel;
  35. }
  36. Panel.Master = Master;
  37. return Panel;
  38. }
  39. }