MainPageViewModel.cs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using Avalonia.Collections;
  2. using Shaker.Model;
  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:ViewModelBase<IModel>
  15. {
  16. private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage;
  17. public AvaloniaList<MainPageItemViewModel> MainPages { get; } = new AvaloniaList<MainPageItemViewModel>();
  18. private IReadOnlyList<IMainPageViewModel> MainPageViewModels { get; } = new List<IMainPageViewModel>()
  19. {
  20. StartPageViewModel.Instance,
  21. SineMainPageViewModel.Instance,
  22. RandomMainPageViewModel.Instance,
  23. OutSignalMainPageViewModel.Instance,
  24. };
  25. private MainPageViewModel()
  26. {
  27. this.GetType().Assembly.GetTypes()
  28. .Where(x => x.GetCustomAttribute<MainPageAttribute>() != null && x.IsAssignableTo(typeof(Views.IMainPage)) && x.IsAnsiClass && !x.IsAbstract)
  29. .ToList()
  30. .ForEach(x =>
  31. {
  32. var page = x.GetCustomAttribute<MainPageAttribute>();
  33. if (page == null) return;
  34. MainPages.Add(new MainPageItemViewModel(page.PageType,x)
  35. {
  36. Cache = page.Cache,
  37. });
  38. });
  39. if(MainPages.Count==0)
  40. {
  41. Environment.Exit(0);
  42. return;
  43. }
  44. MainPageType = MainPageType.StartPage;
  45. }
  46. static MainPageViewModel()
  47. {
  48. }
  49. public MainPageType MainPageType
  50. {
  51. get => mainPageType;
  52. set
  53. {
  54. SetProperty(ref mainPageType, 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. }