// 文件: DMS.WPF/Services/NavigationService.cs using DMS.Helper; using DMS.ViewModels; using DMS.WPF.ViewModels; using DMS.WPF.ViewModels.Items; using DMS.WPF.Views; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Windows; using DMS.WPF.Interfaces; namespace DMS.WPF.Services; /// /// INavigationService 的实现,负责解析ViewModel并处理参数传递。 /// public class NavigationService : INavigationService { private readonly IServiceProvider _serviceProvider; /// /// 构造函数。 /// public NavigationService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// /// 导航到指定键的视图,并传递参数。 /// public async Task NavigateToAsync(MenuItemViewModel menu) { if (string.IsNullOrEmpty(menu.TargetViewKey)) { return; } var mainViewModel = App.Current.Services.GetRequiredService(); var viewModel = GetViewModelByKey(menu.TargetViewKey); if (viewModel == null) { NotificationHelper.ShowError($"切换界面失败,没有找到界面:{menu.TargetViewKey}"); return; } if (viewModel is INavigatable navigatableViewModel) { await navigatableViewModel.OnNavigatedToAsync(menu); } mainViewModel.CurrentViewModel = viewModel; } private ViewModelBase GetViewModelByKey(string key) { switch (key) { case "HomeView": return App.Current.Services.GetRequiredService(); case "DevicesView": return App.Current.Services.GetRequiredService(); case "DeviceDetailView": return App.Current.Services.GetRequiredService(); case "DataTransformView": return App.Current.Services.GetRequiredService(); case "VariableTableView": return App.Current.Services.GetRequiredService(); case "MqttsView": return App.Current.Services.GetRequiredService(); case "MqttServerDetailView": return App.Current.Services.GetRequiredService(); case "SettingView": return App.Current.Services.GetRequiredService(); default: return null; } } }