MainPageViewModel.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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:ViewModelBase<IModel>
  14. {
  15. private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage;
  16. public AvaloniaList<MainPageItemViewModel> MainPages { get; } = new AvaloniaList<MainPageItemViewModel>();
  17. private 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 MainPageType MainPageType
  49. {
  50. get => mainPageType;
  51. set
  52. {
  53. SetProperty(ref mainPageType, value);
  54. ShakerControlViewModel.Instance.PageType = value;
  55. Content = MainPages.First(x => x.PageType == value).Content;
  56. MainPage = MainPageViewModels.First(x => x.PageType == value);
  57. }
  58. }
  59. [AllowNull]
  60. public IMainPageViewModel MainPage { get; private set; }
  61. public static MainPageViewModel Instance { get; } = new MainPageViewModel();
  62. }
  63. }