using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using System.Windows;
using WCTDataMiner.Core.Services;
using WCTDataMiner.Wpf.Messages;
namespace WCTDataMiner.Wpf.ViewModels;
///
/// 主窗口 ViewModel - 导航控制
///
public partial class MainViewModel : ObservableObject,
IRecipient,
IRecipient,
IRecipient,
IRecipient
{
private readonly ImportViewModel _importViewModel;
private readonly ScenarioListViewModel _scenarioListViewModel;
private readonly IServiceProvider _serviceProvider;
[ObservableProperty]
private ObservableObject _currentView = null!;
[ObservableProperty]
private string? _selectedTxPanel;
[ObservableProperty]
private string? _selectedTxHardware;
[ObservableProperty]
private string? _selectedTxSoftware;
[ObservableProperty]
private string? _selectedRxType;
// 筛选选项列表(动态加载)
[ObservableProperty]
private List _txPanels = new() { FilterConstants.AllOption };
[ObservableProperty]
private List _txHardwares = new() { FilterConstants.AllOption };
[ObservableProperty]
private List _txSoftwares = new() { FilterConstants.AllOption };
[ObservableProperty]
private List _rxTypes = new() { FilterConstants.AllOption };
public MainViewModel(
ImportViewModel importViewModel,
ScenarioListViewModel scenarioListViewModel,
IServiceProvider serviceProvider)
{
_importViewModel = importViewModel;
_scenarioListViewModel = scenarioListViewModel;
_serviceProvider = serviceProvider;
_currentView = _scenarioListViewModel;
// 注册导航消息订阅
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
WeakReferenceMessenger.Default.Register(this);
}
///
/// 初始化加载场景数据和筛选选项
///
public async Task InitializeAsync()
{
// 加载筛选选项
var filterOptions = await _scenarioListViewModel.GetFilterOptionsAsync();
TxPanels = filterOptions.TxPanels;
TxHardwares = filterOptions.TxHardwares;
TxSoftwares = filterOptions.TxSoftwares;
RxTypes = filterOptions.RxTypes;
// 加载场景列表
await _scenarioListViewModel.LoadScenariosAsync();
}
[RelayCommand]
private void NavigateToImport()
{
CurrentView = _importViewModel;
}
[RelayCommand]
private async Task NavigateToScenarios()
{
CurrentView = _scenarioListViewModel;
await _scenarioListViewModel.LoadScenariosAsync();
}
[RelayCommand]
private void NavigateToPlossChart(Guid scenarioId)
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = scenarioId;
CurrentView = vm;
}
[RelayCommand]
private void NavigateToQfodChart(Guid scenarioId)
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = scenarioId;
CurrentView = vm;
}
///
/// 应用筛选条件并刷新场景列表
///
public async Task ApplyFilterAsync()
{
await _scenarioListViewModel.LoadScenariosByFilterAsync(
SelectedTxPanel, SelectedTxHardware, SelectedTxSoftware, SelectedRxType);
}
///
/// 接收导航到 Ploss 图表消息
///
public void Receive(NavigateToPlossChartMessage message)
{
Application.Current.Dispatcher.InvokeAsync(() =>
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = message.ScenarioId;
CurrentView = vm;
});
}
///
/// 接收导航到 Qfod 图表消息
///
public void Receive(NavigateToQfodChartMessage message)
{
Application.Current.Dispatcher.InvokeAsync(() =>
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = message.ScenarioId;
CurrentView = vm;
});
}
///
/// 接收导航到 Ploss 表格消息
///
public void Receive(NavigateToPlossTableMessage message)
{
Application.Current.Dispatcher.InvokeAsync(() =>
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = message.ScenarioId;
CurrentView = vm;
});
}
///
/// 接收导航到 Qfod 表格消息
///
public void Receive(NavigateToQfodTableMessage message)
{
Application.Current.Dispatcher.InvokeAsync(() =>
{
var vm = _serviceProvider.GetRequiredService();
vm.ScenarioId = message.ScenarioId;
CurrentView = vm;
});
}
}