using LocalhostMES.DataBase; using LocalhostMES.ViewModels.Services; using Prism.Commands; using Prism.Mvvm; using System.ComponentModel; namespace LocalhostMES.ViewModels { /// /// 主窗口壳:初始化/释放共享会话与 Web API 宿主。 /// public class MainViewModel : BindableBase { private readonly IMesWorkspace _workspace; public MainViewModel(IMesWorkspace workspace) { _workspace = workspace; LoadedCommand = new DelegateCommand(OnLoaded); ClosedCommand = new DelegateCommand(OnClosed); if (_workspace is INotifyPropertyChanged npc) { npc.PropertyChanged += OnWorkspacePropertyChanged; } } public DelegateCommand LoadedCommand { get; } public DelegateCommand ClosedCommand { get; } public int SelectedTabIndex { get => _workspace.SelectedTabIndex; set { if (_workspace.SelectedTabIndex == value) { return; } _workspace.SelectedTabIndex = value; RaisePropertyChanged(); } } private void OnLoaded() { _workspace.Initialize(); } private async void OnClosed() { _workspace.Shutdown(); try { var svc = _workspace.MesManagement.WebApiService; if (svc?.IsRunning == true) { await svc.StopAsync(); } } catch { // 忽略关闭时异常 } } private void OnWorkspacePropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(IMesWorkspace.SelectedTabIndex)) { RaisePropertyChanged(nameof(SelectedTabIndex)); } } } }