From 88547bbae99c984e2da565ac3cd5483396fbe00a Mon Sep 17 00:00:00 2001 From: syneffort Date: Thu, 16 Nov 2023 14:13:17 +0900 Subject: [PATCH] material design --- .../AdvancedPlots/MaterialDesignWindow.xaml | 142 +++++++++++++ .../MaterialDesignWindow.xaml.cs | 196 ++++++++++++++++++ LC_Tutorial/Tutorial/MainWindow.xaml | 48 +++-- LC_Tutorial/Tutorial/MainWindow.xaml.cs | 7 + 4 files changed, 374 insertions(+), 19 deletions(-) create mode 100644 LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml create mode 100644 LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml.cs diff --git a/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml b/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml new file mode 100644 index 0000000..e00732c --- /dev/null +++ b/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Total electricity consumption of Galaxy SOHO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Last 12 hours average Electricity Consumption + + + kWh + + + + + diff --git a/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml.cs b/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml.cs new file mode 100644 index 0000000..428cb0d --- /dev/null +++ b/LC_Tutorial/Tutorial/AdvancedPlots/MaterialDesignWindow.xaml.cs @@ -0,0 +1,196 @@ +using LiveCharts; +using LiveCharts.Defaults; +using LiveCharts.Wpf; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Data; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Imaging; +using System.Windows.Shapes; + +namespace Tutorial.AdvancedPlots +{ + /// + /// MaterialDesignWindow.xaml에 대한 상호 작용 논리 + /// + public partial class MaterialDesignWindow : Window, INotifyPropertyChanged + { + private double _trend; + + private double _lastLecture; + private DateTime _nowDate; + private double _timePowerAverage; + + public event PropertyChangedEventHandler? PropertyChanged; + + public SeriesCollection LastHourSeries { get; set; } + public SeriesCollection TimePowerSeries { get; set; } + + public double LastLecture + { + get { return _lastLecture; } + set + { + _lastLecture = value; + OnPropertyChanged(nameof(LastLecture)); + } + } + + public DateTime NowDate + { + get { return _nowDate; } + set + { + _nowDate = value; + OnPropertyChanged(nameof(NowDate)); + } + } + + public double TimePowerAverage + { + get { return _timePowerAverage; } + set + { + _timePowerAverage = value; + OnPropertyChanged(nameof(TimePowerAverage)); + } + } + + public MaterialDesignWindow() + { + InitializeComponent(); + InitInstance(); + } + + protected virtual void InitInstance() + { + LastHourSeries = new SeriesCollection() + { + new LineSeries() + { + AreaLimit = -10, + Values = new ChartValues() + { + new ObservableValue(3), + new ObservableValue(5), + new ObservableValue(6), + new ObservableValue(7), + new ObservableValue(3), + new ObservableValue(4), + new ObservableValue(2), + new ObservableValue(5), + new ObservableValue(8), + new ObservableValue(3), + new ObservableValue(5), + new ObservableValue(6), + new ObservableValue(7), + new ObservableValue(3), + new ObservableValue(4), + new ObservableValue(2), + new ObservableValue(5), + new ObservableValue(8) + } + } + }; + + _trend = 8; + + TimePowerSeries = new SeriesCollection + { + new ColumnSeries() + { + Values = new ChartValues() + { + new ObservableValue(5), + new ObservableValue(9), + new ObservableValue(8), + new ObservableValue(6), + new ObservableValue(1), + new ObservableValue(5), + new ObservableValue(7), + new ObservableValue(3), + new ObservableValue(6), + new ObservableValue(3) + } + } + }; + + TimePowerAverage = GetTimePowerAverage(); + + Task.Run(() => + { + Random rand = new Random(); + while (true) + { + Thread.Sleep(500); + _trend += (rand.NextDouble() > 0.3 ? 1 : -1) * rand.Next(0, 5); + Application.Current.Dispatcher.Invoke(() => + { + LastHourSeries[0].Values.Add(new ObservableValue(_trend)); + LastHourSeries[0].Values.RemoveAt(0); + SetLecture(); + }); + + int lastPower = rand.Next(1, 11); + Application.Current.Dispatcher.Invoke(() => + { + TimePowerSeries[0].Values.Add(new ObservableValue(lastPower)); + TimePowerSeries[0].Values.RemoveAt(0); + TimePowerAverage = GetTimePowerAverage(); + NowDate = DateTime.Now; + }); + } + }); + + DataContext = this; + } + + private void SetLecture() + { + var target = ((ChartValues)LastHourSeries[0].Values).Last().Value; + var step = (target - _lastLecture) / 4; + + Task.Run(() => + { + for (int i = 0; i < 4; i++) + { + Thread.Sleep(100); + LastLecture += step; + } + + LastLecture = target; + }); + } + + private double GetTimePowerAverage() + { + double sum = 0d; + foreach (var value in TimePowerSeries[0].Values.Cast()) + { + sum += value.Value; + } + + return sum / (double)TimePowerSeries[0].Values.Count; + } + + protected virtual void OnPropertyChanged(string propertyName = null) + { + if (PropertyChanged != null) + PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + + private void btnUpdate_Click(object sender, RoutedEventArgs e) + { + TimePowerChart.Update(true, true); + } + } +} diff --git a/LC_Tutorial/Tutorial/MainWindow.xaml b/LC_Tutorial/Tutorial/MainWindow.xaml index 9df0dc6..30f6357 100644 --- a/LC_Tutorial/Tutorial/MainWindow.xaml +++ b/LC_Tutorial/Tutorial/MainWindow.xaml @@ -5,31 +5,41 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:Tutorial" mc:Ignorable="d" - Title="MainWindow" Height="500" Width="800"> + Title="MainWindow" Height="400" Width="400"> - + - -