using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Messaging; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using PMSWPF.Enums; using PMSWPF.Helper; using PMSWPF.Message; using PMSWPF.ViewModels; namespace PMSWPF.Services; public partial class NavgatorServices : ObservableRecipient, IRecipient { private readonly ILogger _logger; // [ObservableProperty] private ViewModelBase currentViewModel; public NavgatorServices(ILogger logger) { _logger = logger; IsActive = true; } // partial void OnCurrentViewModelChanging(ViewModelBase viewModel) // { // viewModel?.OnLoading(); // } // // partial void OnCurrentViewModelChanged(ViewModelBase viewModel) // { // OnViewModelChanged?.Invoke(); // viewModel?.OnLoaded(); // } public ViewModelBase CurrentViewModel { get => currentViewModel; set { currentViewModel = value; } } public async void Receive(NavgatorMessage message) { try { ViewModelBase nextViewModel = message.Value; //如果OnExit返回False终止跳转 if (currentViewModel != null) { var isExit = await currentViewModel.OnExitAsync(); if (!isExit) { return; } } nextViewModel?.OnLoading(); CurrentViewModel = message.Value; OnViewModelChanged?.Invoke(); currentViewModel?.OnLoaded(); } catch (Exception e) { NotificationHelper.ShowMessage($"切换视图时发生了错误:{e.Message}", NotificationType.Error); _logger.LogError($"切换视图时发生了错误:{e}"); } } public event Action OnViewModelChanged; }