123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- using Avalonia.Collections;
- using Shaker.Models;
- using ShakerApp.Views;
- using System;
- using System.Collections.Generic;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- namespace ShakerApp.ViewModels
- {
- internal class MainPageViewModel:ViewModelBase<IModel>
- {
- private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage;
- public AvaloniaList<MainPageItemViewModel> MainPages { get; } = new AvaloniaList<MainPageItemViewModel>();
- private IReadOnlyList<IMainPageViewModel> MainPageViewModels { get; } = new List<IMainPageViewModel>()
- {
- StartPageViewModel.Instance,
- SineMainPageViewModel.Instance,
- RandomMainPageViewModel.Instance,
- OutSignalMainPageViewModel.Instance,
- };
- private MainPageViewModel()
- {
- this.GetType().Assembly.GetTypes()
- .Where(x => x.GetCustomAttribute<MainPageAttribute>() != null && x.IsAssignableTo(typeof(Views.IMainPage)) && x.IsAnsiClass && !x.IsAbstract)
- .ToList()
- .ForEach(x =>
- {
- var page = x.GetCustomAttribute<MainPageAttribute>();
- if (page == null) return;
- MainPages.Add(new MainPageItemViewModel(page.PageType,x)
- {
- Cache = page.Cache,
- });
- });
- if(MainPages.Count==0)
- {
- Environment.Exit(0);
- return;
- }
- MainPageType = MainPageType.StartPage;
- }
- static MainPageViewModel()
- {
- }
- public MainPageType MainPageType
- {
- get => mainPageType;
- set
- {
- SetProperty(ref mainPageType, value);
- ShakerControlViewModel.Instance.PageType = value;
- Content = MainPages.First(x => x.PageType == value).Content;
- MainPage = MainPageViewModels.First(x => x.PageType == value);
- }
- }
- [AllowNull]
- public IMainPageViewModel MainPage { get; private set; }
- public static MainPageViewModel Instance { get; } = new MainPageViewModel();
- }
- }
|