MainPageViewModel.cs 2.6 KB

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