MainPageViewModel.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using Avalonia.Collections;
  2. using Shaker.Models;
  3. using ShakerApp.Views;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics.CodeAnalysis;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. namespace ShakerApp.ViewModels
  12. {
  13. internal class MainPageViewModel:DisplayViewModelBase<IModel>
  14. {
  15. private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage;
  16. public AvaloniaList<MainPageItemViewModel> MainPages { get; } = new AvaloniaList<MainPageItemViewModel>();
  17. public IReadOnlyList<IMainPageViewModel> MainPageViewModels { get; } = new List<IMainPageViewModel>()
  18. {
  19. StartPageViewModel.Instance,
  20. SineMainPageViewModel.Instance,
  21. RandomMainPageViewModel.Instance,
  22. OutSignalMainPageViewModel.Instance,
  23. };
  24. private MainPageViewModel()
  25. {
  26. this.GetType().Assembly.GetTypes()
  27. .Where(x => x.GetCustomAttribute<MainPageAttribute>() != null && x.IsAssignableTo(typeof(Views.IMainPage)) && x.IsAnsiClass && !x.IsAbstract)
  28. .ToList()
  29. .ForEach(x =>
  30. {
  31. var page = x.GetCustomAttribute<MainPageAttribute>();
  32. if (page == null) return;
  33. MainPages.Add(new MainPageItemViewModel(page.PageType,x)
  34. {
  35. Cache = page.Cache,
  36. });
  37. });
  38. if(MainPages.Count==0)
  39. {
  40. Environment.Exit(0);
  41. return;
  42. }
  43. MainPageType = MainPageType.StartPage;
  44. }
  45. static MainPageViewModel()
  46. {
  47. }
  48. public void SaveTdmsConfig(TDMS.ITDMSFile? config)
  49. {
  50. if (config == null) return;
  51. MainPage.SaveTdmsConfig(config);
  52. config.CreateOrUpdateProperty(nameof(MainPageType), MainPageType.ToString());
  53. }
  54. public void SaveTestData(TDMS.ITDMSFile? file)=>MainPage.SaveTestData(file);
  55. public MainPageType MainPageType
  56. {
  57. get => mainPageType;
  58. set
  59. {
  60. SetProperty(ref mainPageType, value);
  61. ShakerControlViewModel.Instance.PageType = value;
  62. Content = MainPages.First(x => x.PageType == value).Content;
  63. MainPage = MainPageViewModels.First(x => x.PageType == value);
  64. MainPage.InitUI();
  65. }
  66. }
  67. [AllowNull]
  68. public IMainPageViewModel MainPage { get; private set; }
  69. public static MainPageViewModel Instance { get; } = new MainPageViewModel();
  70. }
  71. }