feat: 더미 데이터 파일 읽어드리기 및 믈릭 시 데이터 반영

prototype
HyungJune Kim 10 months ago
parent 0a4900689e
commit 9cf43930c0

@ -1,29 +1,46 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using SmartAquaViewer.DataAnalysis;
using static MaterialDesignThemes.Wpf.Theme.ToolBar;
namespace SmartAquaViewer.Model
{
public class Datas
public class Datas : INotifyPropertyChanged
{
public static List<WaterQualityVO> WaterQualityList { get; set; }
public static Datas Instance { get; } = new Datas();
static Datas()
public ObservableCollection<WaterQualityVO> WaterQualityList { get; set; }
public ReadOnlyObservableCollection<WaterQualityVO> WaterQualityView { get; }
private Datas()
{
WaterQualityList = new List<WaterQualityVO>();
WaterQualityList = new ObservableCollection<WaterQualityVO>();
WaterQualityView = new ReadOnlyObservableCollection<WaterQualityVO>(WaterQualityList);
}
public static List<WaterQualityVO> GetWaterQualityVO()
public ObservableCollection<WaterQualityVO> GetWaterQualityVO()
{
return WaterQualityList;
}
public static void SetWaterQualityVO(List<WaterQualityVO> sampleData)
public void SetWaterQualityVO(List<WaterQualityVO> sampleData)
{
WaterQualityList = sampleData;
WaterQualityList.Clear();
if (sampleData == null) return;
foreach (var data in sampleData)
WaterQualityList.Add(data);
OnPropertyChanged(nameof(WaterQualityList));
}
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged(string name) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}

@ -9,5 +9,6 @@ namespace SmartAquaViewer.Model
public class FileModel
{
public string Name { get; set; }
public string Content { get; set; }
}
}

@ -34,21 +34,22 @@
</Button>
</StackPanel>
<ListView Grid.Row="1"
Margin="10"
ItemsSource="{Binding FileList}"
SelectedItem="{Binding SelectedFile}"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
BorderThickness="0" Background="Transparent">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0 5">
<TextBlock Text="{Binding Name}" Margin="5"
FontSize="16" FontWeight="Medium" Foreground="White"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ScrollViewer Grid.Row="1" Margin="10" >
<ListView
ItemsSource="{Binding FileList}"
SelectedItem="{Binding SelectedFile}"
ScrollViewer.VerticalScrollBarVisibility="Hidden"
BorderThickness="0" Background="Transparent">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0 5">
<TextBlock Text="{Binding Name}" Margin="5"
FontSize="16" FontWeight="Medium" Foreground="White"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ScrollViewer>
</Grid>
</Border>
</UserControl>

@ -246,7 +246,7 @@ namespace SmartAquaViewer.ViewModel
public EnergyViewModel()
{
WaterQualityList = Datas.GetWaterQualityVO();
WaterQualityList = Datas.Instance.GetWaterQualityVO().ToList();
GraphTypes = new ObservableCollection<GraphType>
{
GraphType.LINE,

@ -2,13 +2,17 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Microsoft.Win32;
using Newtonsoft.Json;
using SmartAquaViewer.Controls;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
namespace SmartAquaViewer.ViewModel
@ -25,9 +29,10 @@ namespace SmartAquaViewer.ViewModel
{
if (_selectedFile != value)
{
_selectedFile = value;
_selectedFile = value;
OnPropertyChanged();
DeserializeContentToJson();
}
}
}
@ -57,6 +62,9 @@ namespace SmartAquaViewer.ViewModel
var fileName = System.IO.Path.GetFileName(filePath);
var fileModel = new FileModel { Name = fileName };
var fileContent = File.ReadAllText(filePath);
fileModel.Content = fileContent;
if (!FileList.Any(f => f.Name == fileModel.Name))
{
FileList.Add(fileModel);
@ -65,6 +73,25 @@ namespace SmartAquaViewer.ViewModel
}
}
private void DeserializeContentToJson()
{
if (SelectedFile == null || string.IsNullOrWhiteSpace(SelectedFile.Content))
return;
try
{
var list = JsonConvert.DeserializeObject<List<WaterQualityVO>>(SelectedFile.Content)
?? new List<WaterQualityVO>();
// 여기서 SSOT에 "내용만" 갱신
Datas.Instance.SetWaterQualityVO(list);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string? name = null)
=> PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));

@ -104,7 +104,7 @@ namespace SmartAquaViewer.ViewModel
public GreenHouseGasViewModel()
{
WaterQualityList = Datas.GetWaterQualityVO();
WaterQualityList = Datas.Instance.GetWaterQualityVO().ToList();
GraphTypes = new ObservableCollection<GraphType>
{
GraphType.LINE,

@ -1,11 +1,13 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using Newtonsoft.Json;
using SmartAquaViewer.Controls;
using SmartAquaViewer.DataAnalysis;
using SmartAquaViewer.Model;
@ -35,6 +37,17 @@ namespace SmartAquaViewer.ViewModel
SwapViewCommand = new RelayCommand(SwapView);
SelectedViewModel = new MonitoringViewModel(); // Default view
//더미데이터 생성 및 파일로 저장
//for (int i = 1; i <= 10; i++)
//{
// DateTime date = new(2025, 8, i);
// var dataList = WaterQualityVO.GetSampleData(date, date, 24);
// var jsonStr = JsonConvert.SerializeObject(dataList, Formatting.Indented);
// string fileName = date.ToString("yyyy-MM-dd") + ".json";
// File.WriteAllText(fileName, jsonStr);
//}
}
private void SwapView(object obj)

@ -32,7 +32,7 @@ namespace SmartAquaViewer.ViewModel
public ObservableCollection<GraphType> GraphTypes { get; }
public List<WaterQualityVO> WaterQualityList { get; }
public ReadOnlyObservableCollection<WaterQualityVO> WaterQualityList { get; }
public Dictionary<int, ObservableCollection<WaterQualityVO>> TankGroups { get; }
private MonitorTab _selectedTab;
@ -242,8 +242,9 @@ namespace SmartAquaViewer.ViewModel
IsOpenMode = true;
BtnVisibilityUp = Visibility.Collapsed;
WaterQualityList = WaterQualityVO.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 1), 10);
Datas.SetWaterQualityVO(WaterQualityList);
//WaterQualityList = WaterQualityVO.GetSampleData(new DateTime(2025, 8, 1), new DateTime(2025, 8, 1), 10);
//Datas.Instance.SetWaterQualityVO(WaterQualityList);
WaterQualityList = Datas.Instance.WaterQualityView;
TankGroups = WaterQualityList
.GroupBy(x => x.Tank.Number) // 또는 x.Tank.Num
@ -274,21 +275,21 @@ namespace SmartAquaViewer.ViewModel
var yField = SelectedYField;
var isMarker = ShowMarkers;
if (SelectedTab.Equals(MonitorTab.Tank)) SetGraphData_Line_Tank(xField, yField, isMarker);
else GraphControlVM.SetDefaultLineGraph(WaterQualityList, SelectedTab, xField, yField, isMarker);
else GraphControlVM.SetDefaultLineGraph(WaterQualityList.ToList(), SelectedTab, xField, yField, isMarker);
break;
case GraphType.BOX:
var xFieldBox = SelectedXField;
var dataFieldBox = SelectedYField;
var boxWidth = BoxWidth;
var boxTimeSpan = TimeSpan.FromHours(BoxTimeSpan);
GraphControlVM.SetBoxPlot(WaterQualityList, xFieldBox, dataFieldBox, boxWidth, boxTimeSpan);
GraphControlVM.SetBoxPlot(WaterQualityList.ToList(), xFieldBox, dataFieldBox, boxWidth, boxTimeSpan);
break;
case GraphType.SCATTER:
var xFieldScatter = SelectedXField;
var yFiledScatter = SelectedYField;
var markerSIze = ScatterMarkerSize;
var showRegression = ShowRegression;
GraphControlVM.SetScatterPlot(WaterQualityList, xFieldScatter, yFiledScatter, markerSIze, showRegression);
GraphControlVM.SetScatterPlot(WaterQualityList.ToList(), xFieldScatter, yFiledScatter, markerSIze, showRegression);
break;
case GraphType.STEP:
var xFieldStep = SelectedXField?.Name == "RecordedTime" ? SelectedXField : null;
@ -296,9 +297,9 @@ namespace SmartAquaViewer.ViewModel
var yFiledStep = SelectedYField;
var showMarkerStep = ShowMarkers;
if (SelectedKind.Equals(StepFieldKind.Status))
GraphControlVM.SetStatusSeriesStopPlot(WaterQualityList, yFiledStep, showMarkerStep);
GraphControlVM.SetStatusSeriesStopPlot(WaterQualityList.ToList(), yFiledStep, showMarkerStep);
else
GraphControlVM.SetStepPlot(WaterQualityList, SelectedTab, xFieldStep, tFieldsStep, showMarkerStep);
GraphControlVM.SetStepPlot(WaterQualityList.ToList(), SelectedTab, xFieldStep, tFieldsStep, showMarkerStep);
break;
default:
break;

Loading…
Cancel
Save