using System; using System.Linq; using System.Windows; using LiveCharts; using LiveCharts.Defaults; using LiveCharts.Helpers; using LiveCharts.Wpf; namespace Wpf.CartesianChart.UIElements { public class UiElementsViewModel { private DateTimePoint _selectedPoint; public UiElementsViewModel() { Values = DataProvider.Points.AsChartValues(); Formatter = x => new DateTime((long) x).ToString("dd MMM"); Step = TimeSpan.FromDays(1).Ticks * 2; //lets get some random points to add an even in the chart. var e1 = Values.Skip(15).Take(1).First(); var e2 = Values.Skip(35).Take(1).First(); SelectedVisualElement = new VisualElement { HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Bottom, UIElement = new SelectedItemControl() }; Visuals = new VisualElementsCollection { new VisualElement { X = e1.DateTime.Ticks, Y = e1.Value, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Top, UIElement = new EventAControl() }, new VisualElement { X = e2.DateTime.Ticks, Y = e2.Value, HorizontalAlignment = HorizontalAlignment.Center, VerticalAlignment = VerticalAlignment.Top, UIElement = new EventBControl() }, SelectedVisualElement }; } public ChartValues<DateTimePoint> Values { get; set; } public VisualElementsCollection Visuals { get; set; } public VisualElement EventA { get; set; } public VisualElement EventB { get; set; } public VisualElement SelectedVisualElement { get; set; } public Func<double, string> Formatter { get; set; } public double Step { get; set; } public DateTimePoint SelectedPoint { get { return _selectedPoint; } set { _selectedPoint = value; UpdateSelectedVisual(); } } private void UpdateSelectedVisual() { SelectedVisualElement.X = SelectedPoint.DateTime.Ticks; SelectedVisualElement.Y = SelectedPoint.Value; } } }