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 { private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage; public AvaloniaList MainPages { get; } = new AvaloniaList(); private IReadOnlyList MainPageViewModels { get; } = new List() { StartPageViewModel.Instance, SineMainPageViewModel.Instance, RandomMainPageViewModel.Instance, OutSignalMainPageViewModel.Instance, }; private MainPageViewModel() { this.GetType().Assembly.GetTypes() .Where(x => x.GetCustomAttribute() != null && x.IsAssignableTo(typeof(Views.IMainPage)) && x.IsAnsiClass && !x.IsAbstract) .ToList() .ForEach(x => { var page = x.GetCustomAttribute(); 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(); } }