using System.Collections.ObjectModel; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; using JetBrains.Annotations; using Livia.Models.Data; using Livia.ViewModels; namespace iBrain.ViewModels; public readonly record struct FeatureDataDisplay { public string Name { get; init; } public double Value { get; init; } public string Reference { get; init; } public string Note { get; init; } public int ColorCode { get; init; } } public record struct FeatureData { [UsedImplicitly, JsonPropertyName("featureChineseName")] public string FeatureChineseName { get; init; } [UsedImplicitly, JsonPropertyName("featureValue")] public double FeatureValue { get; init; } [UsedImplicitly, JsonPropertyName("remark")] public int Trend { get; init; } [UsedImplicitly, JsonPropertyName("range")] public string Range { get; init; } } public class FeatureDataGridControlViewModel : ILiviaModuleViewModel { public ObservableCollection RegionsCollection { get; } = []; public string LoadPath { get; set; } = string.Empty; public async Task LoadData(DataBlock dataBlock) { if (string.IsNullOrEmpty(LoadPath)) return; RegionsCollection.Clear(); string file = Path.Combine(dataBlock.ResultPath, LoadPath); await using FileStream openStream = File.OpenRead(file); List? featureList = await JsonSerializer.DeserializeAsync>(openStream); if (featureList == null) { return; } foreach (FeatureData data in featureList) { FeatureDataDisplay featureDataDisplay = new() { Name = data.FeatureChineseName, Value = data.FeatureValue, Reference = data.Range, Note = data.Trend switch { -1 => "↓", 1 => "↑", _ => "-" }, ColorCode = data.Trend }; RegionsCollection.Add(featureDataDisplay); } } public void Init() { } }