MainPageViewModel.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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. }
  65. }
  66. [AllowNull]
  67. public IMainPageViewModel MainPage { get; private set; }
  68. public static MainPageViewModel Instance { get; } = new MainPageViewModel();
  69. }
  70. }