MainViewModel.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using LocalhostMES.DataBase;
  2. using LocalhostMES.ViewModels.Services;
  3. using Prism.Commands;
  4. using Prism.Mvvm;
  5. using System.ComponentModel;
  6. namespace LocalhostMES.ViewModels
  7. {
  8. /// <summary>
  9. /// 主窗口壳:初始化/释放共享会话与 Web API 宿主。
  10. /// </summary>
  11. public class MainViewModel : BindableBase
  12. {
  13. private readonly IMesWorkspace _workspace;
  14. public MainViewModel(IMesWorkspace workspace)
  15. {
  16. _workspace = workspace;
  17. LoadedCommand = new DelegateCommand(OnLoaded);
  18. ClosedCommand = new DelegateCommand(OnClosed);
  19. if (_workspace is INotifyPropertyChanged npc)
  20. {
  21. npc.PropertyChanged += OnWorkspacePropertyChanged;
  22. }
  23. }
  24. public DelegateCommand LoadedCommand { get; }
  25. public DelegateCommand ClosedCommand { get; }
  26. public int SelectedTabIndex
  27. {
  28. get => _workspace.SelectedTabIndex;
  29. set
  30. {
  31. if (_workspace.SelectedTabIndex == value)
  32. {
  33. return;
  34. }
  35. _workspace.SelectedTabIndex = value;
  36. RaisePropertyChanged();
  37. }
  38. }
  39. private void OnLoaded()
  40. {
  41. _workspace.Initialize();
  42. }
  43. private async void OnClosed()
  44. {
  45. _workspace.Shutdown();
  46. try
  47. {
  48. var svc = _workspace.MesManagement.WebApiService;
  49. if (svc?.IsRunning == true)
  50. {
  51. await svc.StopAsync();
  52. }
  53. }
  54. catch
  55. {
  56. // 忽略关闭时异常
  57. }
  58. }
  59. private void OnWorkspacePropertyChanged(object sender, PropertyChangedEventArgs e)
  60. {
  61. if (e.PropertyName == nameof(IMesWorkspace.SelectedTabIndex))
  62. {
  63. RaisePropertyChanged(nameof(SelectedTabIndex));
  64. }
  65. }
  66. }
  67. }