diff --git a/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml b/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml
new file mode 100644
index 0000000..590a2d0
--- /dev/null
+++ b/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml.cs b/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml.cs
new file mode 100644
index 0000000..daf2602
--- /dev/null
+++ b/LC_Tutorial/Tutorial/BasicPlots/DoughnutWindow.xaml.cs
@@ -0,0 +1,123 @@
+using LiveCharts;
+using LiveCharts.Defaults;
+using LiveCharts.Wpf;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+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.BasicPlots
+{
+ ///
+ /// DoughnutWindow.xaml에 대한 상호 작용 논리
+ ///
+ public partial class DoughnutWindow : Window
+ {
+ private int _index;
+
+ public SeriesCollection SeriesCollection { get; set; }
+
+ public DoughnutWindow()
+ {
+ InitializeComponent();
+ InitInstance();
+ }
+
+ private void InitInstance()
+ {
+ SeriesCollection = new SeriesCollection()
+ {
+ new PieSeries()
+ {
+ Title = "Chrome",
+ Values = new ChartValues { new ObservableValue(8) },
+ DataLabels = true,
+ },
+ new PieSeries()
+ {
+ Title = "FireFox",
+ Values = new ChartValues { new ObservableValue(6) },
+ DataLabels = true,
+ },
+ new PieSeries()
+ {
+ Title = "Opera",
+ Values = new ChartValues { new ObservableValue(10) },
+ DataLabels = true,
+ },
+ new PieSeries()
+ {
+ Title = "Edge",
+ Values = new ChartValues { new ObservableValue(20) },
+ DataLabels = true,
+ },
+ };
+
+ DataContext = this;
+ }
+
+ private void btnUpdate_Click(object sender, RoutedEventArgs e)
+ {
+ Random rand = new Random();
+ foreach (var series in SeriesCollection)
+ {
+ foreach (var observable in series.Values.Cast())
+ {
+ observable.Value = rand.Next(0, 20);
+ }
+ }
+ }
+
+ private void btnRestart_Click(object sender, RoutedEventArgs e)
+ {
+ chtPie.Update(true, true);
+ }
+
+ private void btnAddSeries_Click(object sender, RoutedEventArgs e)
+ {
+ Random rand = new Random();
+ int len = SeriesCollection.Count > 0 ? SeriesCollection[0].Values.Count : 5;
+
+ var vals = new ChartValues();
+ for (int i = 0; i < len; i++)
+ {
+ vals.Add(new ObservableValue(rand.Next(0, 10)));
+ }
+
+ SeriesCollection.Add(new PieSeries() { Values = vals, DataLabels = true, Title = $"Browser{++_index}" });
+ }
+
+ private void btnRemoveSeries_Click(object sender, RoutedEventArgs e)
+ {
+ if (SeriesCollection.Count > 0)
+ SeriesCollection.RemoveAt(SeriesCollection.Count - 1);
+ }
+
+ private void btnAddValue_Click(object sender, RoutedEventArgs e)
+ {
+ Random rand = new Random();
+ foreach (var series in SeriesCollection)
+ {
+ series.Values.Add(new ObservableValue(rand.Next(0, 10)));
+ }
+ }
+
+ private void btnRemoveValue_Click(object sender, RoutedEventArgs e)
+ {
+ foreach (var series in SeriesCollection)
+ {
+ if (series.Values.Count > 0)
+ series.Values.RemoveAt(series.Values.Count - 1);
+ }
+ }
+ }
+}
diff --git a/LC_Tutorial/Tutorial/MainWindow.xaml b/LC_Tutorial/Tutorial/MainWindow.xaml
index c9380b2..51ac560 100644
--- a/LC_Tutorial/Tutorial/MainWindow.xaml
+++ b/LC_Tutorial/Tutorial/MainWindow.xaml
@@ -22,6 +22,7 @@
+
diff --git a/LC_Tutorial/Tutorial/MainWindow.xaml.cs b/LC_Tutorial/Tutorial/MainWindow.xaml.cs
index bfc503b..7800357 100644
--- a/LC_Tutorial/Tutorial/MainWindow.xaml.cs
+++ b/LC_Tutorial/Tutorial/MainWindow.xaml.cs
@@ -85,5 +85,11 @@ namespace Tutorial
PieWindow win = new PieWindow();
win.Show();
}
+
+ private void btnDoughnut_Click(object sender, RoutedEventArgs e)
+ {
+ DoughnutWindow win = new DoughnutWindow();
+ win.Show();
+ }
}
}