85 lines
3 KiB
C#
85 lines
3 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using System.Collections.ObjectModel;
|
|
using System.Windows;
|
|
using Livia.Models.Data;
|
|
using Livia.Models;
|
|
using Microsoft.Extensions.Logging;
|
|
using CommunityToolkit.Mvvm.Messaging;
|
|
using Livia.Utility;
|
|
|
|
namespace Livia.ViewModels;
|
|
|
|
public class PerfusionParameter : ObservableObject
|
|
{
|
|
public bool IsChecked { get => _isChecked; set => SetProperty(ref _isChecked, value); }
|
|
|
|
public string Name { get => _name; init => SetProperty(ref _name, value); }
|
|
|
|
private bool _isChecked;
|
|
private readonly string _name = string.Empty;
|
|
}
|
|
|
|
public class PerfusionDataGridGroupControlViewModel : ObservableRecipient, ILiviaModuleViewModel, IRecipient<PerfusionDataGridChangeParameterMessage>
|
|
{
|
|
public ObservableCollection<PerfusionDataGridControlViewModel> PerfusionDataGridViewModelCollection { get; } = [];
|
|
public ObservableCollection<PerfusionParameter> Parameters { get; } = [];
|
|
|
|
private DataBlock? _currentDataBlock;
|
|
private readonly IDataBlockLoader _dataBlockLoader;
|
|
private readonly ILogger _logger;
|
|
|
|
public PerfusionDataGridGroupControlViewModel(IDataBlockLoader dataBlockLoader, ILogger logger)
|
|
{
|
|
_dataBlockLoader = dataBlockLoader;
|
|
_logger = logger;
|
|
WeakReferenceMessenger.Default.RegisterAll(this);
|
|
}
|
|
|
|
public async Task LoadData(DataBlock dataBlock)
|
|
{
|
|
Parameters.Clear();
|
|
|
|
AdditionalInfoJson additionalInfo = _dataBlockLoader.GetSharedData<AdditionalInfoJson>("additionalInfo");
|
|
foreach (KeyValuePair<string, List<AtlasInfo>> keyValuePair in additionalInfo.AtlasInfoListDict)
|
|
{
|
|
PerfusionParameter parameter = new()
|
|
{
|
|
Name = keyValuePair.Key,
|
|
IsChecked = keyValuePair.Key == PerfusionDataGridControlViewModel.LoadAtlasName
|
|
};
|
|
Parameters.Add(parameter);
|
|
}
|
|
|
|
Task[] loadTasks = PerfusionDataGridViewModelCollection.Select(perfusionDataGridControlViewModel => perfusionDataGridControlViewModel.LoadData(dataBlock)).ToArray();
|
|
await Task.WhenAll(loadTasks);
|
|
|
|
_currentDataBlock = dataBlock;
|
|
}
|
|
|
|
public void Init()
|
|
{
|
|
}
|
|
|
|
public void Receive(PerfusionDataGridChangeParameterMessage message)
|
|
{
|
|
_logger.LogInformation($"PerfusionDataGrid switching to {message.Value}");
|
|
|
|
if (_currentDataBlock == null)
|
|
return;
|
|
|
|
PerfusionDataGridControlViewModel.LoadAtlasName = message.Value.Item1;
|
|
foreach (PerfusionDataGridControlViewModel perfusionDataGridControlViewModel in PerfusionDataGridViewModelCollection)
|
|
{
|
|
Application.Current.Dispatcher.Invoke(() => perfusionDataGridControlViewModel.LoadData(_currentDataBlock));
|
|
}
|
|
|
|
//update radio button state
|
|
foreach (PerfusionParameter parameter in Parameters)
|
|
{
|
|
if (parameter.Name != message.Value.Item1)
|
|
continue;
|
|
parameter.IsChecked = true;
|
|
return;
|
|
}
|
|
}
|
|
} |