// 文件: DMS.WPF/Services/NavigationService.cs using DMS.WPF.ViewModels; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Windows; using DMS.ViewModels; using DMS.WPF.Views; namespace DMS.WPF.Services; /// /// INavigationService 的实现,负责解析ViewModel并处理参数传递。 /// public class NavigationService : INavigationService { private readonly IServiceProvider _serviceProvider; /// /// 构造函数。 /// public NavigationService(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } /// /// 导航到指定键的视图,并传递参数。 /// public async Task NavigateToAsync(string viewKey, object parameter = null) { if (string.IsNullOrEmpty(viewKey)) { return; } var mainViewModel = App.Current.Services.GetRequiredService(); var viewModel = GetViewModelByKey(viewKey); if (viewModel is INavigatable navigatableViewModel) { await navigatableViewModel.OnNavigatedToAsync(parameter); } 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: throw new KeyNotFoundException($"未找到与键 '{key}' 关联的视图模型类型。请检查 NavigationService 的映射配置。"); } } }