using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Controls;
using System.Windows.Threading;
using LiveCharts;
using LiveCharts.Defaults;
using LiveCharts.Wpf;
using Wpf.Annotations;
namespace Wpf
{
///
/// Interaction logic for PanelExample.xaml
///
public partial class PanelExample : UserControl
{
public PanelExample()
{
InitializeComponent();
}
}
public class DarkPanelControlVm : INotifyPropertyChanged
{
private double _angularGaugeValue;
private DispatcherTimer _timer = new DispatcherTimer();
public DarkPanelControlVm()
{
_timer.Interval = TimeSpan.FromMilliseconds(1000);
_timer.Tick += TimerOnTick;
_timer.Start();
AngularGaugeValue = 50;
Yes = new ObservableValue(10);
No = new ObservableValue(6);
Maybe = new ObservableValue(4);
Line1 = new ChartValues
{
new ObservableValue(3),
new ObservableValue(5),
new ObservableValue(1),
new ObservableValue(6),
new ObservableValue(8),
new ObservableValue(3),
new ObservableValue(6),
new ObservableValue(3)
};
PieSeries = new SeriesCollection
{
new PieSeries {Title = "Yes",Values = new ChartValues {Yes}},
new PieSeries {Title = "No", Values = new ChartValues {Maybe}},
new PieSeries {Title = "Maybe", Values = new ChartValues {Maybe}}
};
GeoValues = new Dictionary();
var r = new Random();
GeoValues["MX"] = r.Next(0, 100);
GeoValues["RU"] = r.Next(0, 100);
GeoValues["CA"] = r.Next(0, 100);
GeoValues["US"] = r.Next(0, 100);
GeoValues["IN"] = r.Next(0, 100);
GeoValues["CN"] = r.Next(0, 100);
GeoValues["JP"] = r.Next(0, 100);
GeoValues["BR"] = r.Next(0, 100);
GeoValues["DE"] = r.Next(0, 100);
GeoValues["FR"] = r.Next(0, 100);
GeoValues["GB"] = r.Next(0, 100);
DynamicValues = new ChartValues
{
new ObservableValue(1),
new ObservableValue(5),
new ObservableValue(4),
new ObservableValue(7),
new ObservableValue(4),
new ObservableValue(8)
};
Formatter = x => x.ToString("P");
}
public ChartValues Line1 { get; set; }
public ChartValues DynamicValues { get; set; }
public SeriesCollection PieSeries { get; set; }
public ObservableValue Yes { get; set; }
public ObservableValue No { get; set; }
public ObservableValue Maybe { get; set; }
public Dictionary GeoValues { get; set; }
public Func Formatter { get; set; }
public double AngularGaugeValue
{
get { return _angularGaugeValue; }
set
{
_angularGaugeValue = value;
OnPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void TimerOnTick(object sender, EventArgs eventArgs)
{
var r = new Random();
AngularGaugeValue += r.NextDouble() > 0.5 ? r.NextDouble()*10 : -r.NextDouble()*10;
Yes.Value += r.NextDouble() > 0.5 ? r.NextDouble() * 1 : -r.NextDouble() * 1;
No.Value += r.NextDouble() > 0.5 ? r.NextDouble() * 1 : -r.NextDouble() * 1;
Maybe.Value += r.NextDouble() > 0.5 ? r.NextDouble() * 1 : -r.NextDouble() * 1;
if (r.NextDouble() > .7)
{
foreach (var observableValue in Line1)
{
observableValue.Value = r.NextDouble()*10;
}
}
Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
DynamicValues.Add(new ObservableValue(r.NextDouble()*10));
DynamicValues.RemoveAt(0);
Thread.Sleep(500);
DynamicValues.Add(new ObservableValue(r.NextDouble()*10));
DynamicValues.RemoveAt(0);
});
}
protected virtual void OnPropertyChanged( string propertyName = null)
{
var handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}