1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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:DisplayViewModelBase<IModel>
- {
- private MainPageType mainPageType = Shaker.Models.MainPageType.StartPage;
- public AvaloniaList<MainPageItemViewModel> MainPages { get; } = new AvaloniaList<MainPageItemViewModel>();
- public 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 void SaveTdmsConfig(TDMS.ITDMSFile? config)
- {
- if (config == null) return;
- MainPage.SaveTdmsConfig(config);
- config.CreateOrUpdateProperty(nameof(MainPageType), MainPageType.ToString());
- }
- public void SaveTestData(TDMS.ITDMSFile? file)=>MainPage.SaveTestData(file);
- 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();
- }
- }
|