using CommunityToolkit.Mvvm.ComponentModel; using SSPCTester.Logic.Models; namespace SSPCTester.UI.ViewModels; /// 测试主界面(TabControl 容器)。 public partial class TestHostViewModel : ObservableObject { [ObservableProperty] private Project? _project; [ObservableProperty] private TestSessionViewModel? _session; [ObservableProperty] private int _selectedTabIndex; private bool _isViewActive; public ExperimentConsoleViewModel Console { get; } public BasicTestViewModel Basic { get; } public CurveTestViewModel Curve { get; } public PowerTestViewModel Power { get; } public ProtectViewModel Protect { get; } public TestHostViewModel(ExperimentConsoleViewModel console, BasicTestViewModel basic, CurveTestViewModel curve, PowerTestViewModel power, ProtectViewModel protect) { Console = console; Basic = basic; Curve = curve; Power = power; Protect = protect; } partial void OnSelectedTabIndexChanged(int value) => UpdateConsoleActive(); public void SetViewActive(bool active) { _isViewActive = active; UpdateConsoleActive(); } public void SetProject(Project p) { Project = p; Basic.SetProject(p); Curve.SetProject(p); Power.SetProject(p); Protect.SetProject(p); } public void AttachSession(TestSessionViewModel s) { Session = s; Curve.AttachSession(s); Protect.AttachSession(s); } private void UpdateConsoleActive() { // Identify this host when acquiring/releasing console polling. During a // project switch WPF can load the new host before unloading the old one; // the old host must not stop the shared console on behalf of the new host. Console.SetActive(this, _isViewActive && SelectedTabIndex == 0); } }