123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- using HandyControl.Interactivity.Commands;
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Diagnostics.CodeAnalysis;
- using System.Linq;
- using System.Reflection;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Input;
- namespace ShakerManger.ViewModel
- {
- internal class MainWindowViewModel:Shaker.ViewModel.ViewModelBase<Shaker.Model.ModelBase>
- {
-
- public bool IsEnabled { get => isEnabled; set =>UpdateProperty(ref isEnabled, value); }
- [AllowNull]
- private IMainPageViewModel currentMainPage;
- private bool isEnabled = true;
- private bool isSaveData = false;
- private bool layoutVisibily = true;
- private MainWindowViewModel()
- {
- this.GetType().Assembly.GetTypes().Where(x => x.GetInterface(typeof(IMainPageViewModel).FullName!)!= null && x.IsAnsiClass && !x.IsAbstract)
- .Select(x => (IMainPageViewModel)Activator.CreateInstance(x))
- .Where(x => x != null)
- .OrderBy(x => x!.MainPageType)
- .ToList()
- .ForEach(x => MainPages.Add(x!));
- Shakers = MainPages.OfType<ShakersViewModel>().First();
- LogManger = MainPages.OfType<LogMangerViewModel>().First();
- SystemConfig = MainPages.OfType<SystemConfigViewModel>().First();
- DataManger = MainPages.OfType<DataMangerViewModel>().First();
- WarnManger = MainPages.OfType<WarnMangerViewModel>().First();
- if(MainPages.Count > 0)
- {
- CurrentMainPage = MainPages[0];
- }
- LayoutManger.Close = () =>
- {
- Shakers.Layout = LayoutManger.Selected;
- };
- }
- public DataMangerViewModel DataManger { get; init; }
- public LogMangerViewModel LogManger { get; init; }
- static MainWindowViewModel()
- {
- }
- public SystemConfigViewModel SystemConfig { get; init; }
- public override void Init()
- {
- base.Init();
- var result = Sql.Default.Connect();
- if(!result)
- {
- Tools.MessageBoxHelper.Error("数据库连接失败,程序退出");
- App.Current.Shutdown();
- return;
- }
- BusManger.Defaut.Init();
- if(Thread.CurrentThread == Application.Current.Dispatcher.Thread)
- {
- Shakers.Init();
- SystemConfig.Init();
- }
- else
- {
- App.Current.Dispatcher.Invoke(() =>
- {
- Shakers.Init();
- SystemConfig.Init();
- });
- }
- BusManger.Defaut.Bus.PubSub.PublishAsync(new Shaker.Model.MangerExitModel()
- {
- Online = true,
- });
- BusManger.Defaut.Bus.PubSub.Subscribe<Shaker.Model.WarnModel>((data, _) =>
- {
- Sql.Default.Instert(data);
- });
- if (Thread.CurrentThread == Application.Current.Dispatcher.Thread)
- {
- InitedAction?.Invoke();
- }
- else
- {
- App.Current.Dispatcher.Invoke(() =>
- {
- InitedAction?.Invoke();
- });
- }
- }
- public WarnMangerViewModel WarnManger { get; }
- public ShakersViewModel Shakers { get; }
- public LayoutMangerViewModel LayoutManger { get; }= new LayoutMangerViewModel();
- public ICommand ExitCommand => new DelegateCommand(Exit);
- private void Exit()
- {
- Prompt.Init();
- Prompt.Message = "是否退出程序?";
- Prompt.YesAction = () => App.Current.Shutdown();
- Prompt.IsOpen = true;
- }
- public bool LayoutVisibily { get => layoutVisibily; set =>UpdateProperty(ref layoutVisibily , value); }
- public ICommand SaveDataCommand => new DelegateCommand(() => IsSaveData = !IsSaveData);
- public bool IsSaveData { get => isSaveData; set =>UpdateProperty(ref isSaveData, value); }
- [AllowNull]
- public Action InitedAction { get; set; }
- public IMainPageViewModel CurrentMainPage { get => currentMainPage; set =>UpdateProperty(ref currentMainPage, value); }
- public ObservableCollection<IMainPageViewModel> MainPages { get; } = new ObservableCollection<IMainPageViewModel>();
- public PromptViewModel Prompt { get; } = new PromptViewModel();
- public static MainWindowViewModel Default { get; } = new MainWindowViewModel();
- public ICommand CloseCommand=> new DelegateCommand(Close);
- private void Close()
- {
- if(BusManger.Defaut.Bus!=null)
- {
- BusManger.Defaut.Bus.PubSub.PublishAsync(new Shaker.Model.MangerExitModel()
- {
- Online = false,
- });
- BusManger.Defaut.Bus.Dispose();
- }
- LogManger.AddLog("程序退出");
- }
- public ICommand ShutDownCommand=> new DelegateCommand(()=> App.Current.Shutdown());
- public LoginViewModel Login { get; } = new LoginViewModel();
- }
- }
|