using LiveCharts;
using LiveCharts.Configurations;
using LiveCharts.Wpf;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
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.Navigation;
using System.Windows.Shapes;

namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        MainWindowViewModel viewModel;
        public MainWindow()
        {
            InitializeComponent();
            viewModel = new MainWindowViewModel();
            this.DataContext = viewModel;
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {

        }


    }
    public class MainWindowViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public double XMin { get; set; } = double.NaN;
        public double XMax { get; set; } = double.NaN;





        public object Mapper { get; private set; }

        /// <summary>
        /// 选择了的数据才添加到Series
        /// </summary>
        public SeriesCollection Series { get; } = new SeriesCollection();

        public ChartValues<XY> Values { get; } = new ChartValues<XY>();
        

        public MainWindowViewModel()
        { 

            Mapper = Mappers.Xy<XY>()
                .X((value, index) => value.X)
                .Y(value => value.Y);

            Column2Series columnSeries = new Column2Series
            {
                Title = "直方图",
                Values = Values,
                PointGeometry = null,
                ColumnWidth = 0.5,
                Stroke = new SolidColorBrush(Colors.Black),
                StrokeThickness = 1,
                Configuration = Mapper,
            };
            Series.Add(columnSeries);

            Values.Add(new XY(217, 2));
            Values.Add(new XY(220.5, 3));
            Values.Add(new XY(221, 1));
            Values.Add(new XY(221.5, 1));
            Values.Add(new XY(222.5, 1));
            Values.Add(new XY(223.5, 2));
            Values.Add(new XY(224.5, 2));
            Values.Add(new XY(225, 1));
            Values.Add(new XY(225.5, 3));
            Values.Add(new XY(226, 6));
            Values.Add(new XY(235.5, 1));
            Values.Add(new XY(249, 1));
            Values.Add(new XY(256, 2));
            Values.Add(new XY(257.5, 1));
            Values.Add(new XY(264.5, 2));
            Values.Add(new XY(267, 1));
            Values.Add(new XY(268, 1));
            Values.Add(new XY(268.5, 1));
            Values.Add(new XY(269, 1));
            Values.Add(new XY(271, 1));
            Values.Add(new XY(276.5, 1));
            Values.Add(new XY(277, 1));
            Values.Add(new XY(277.5, 1));
            Values.Add(new XY(278, 8));
            Values.Add(new XY(278.5, 2));
            Values.Add(new XY(279, 6));
            Values.Add(new XY(279.5, 6));
            Values.Add(new XY(280, 6));
            Values.Add(new XY(280.5, 11));
            Values.Add(new XY(281, 6));
            Values.Add(new XY(281.5, 9));
            Values.Add(new XY(282, 8));
            Values.Add(new XY(282.5, 12));
            Values.Add(new XY(283, 12));
            Values.Add(new XY(283.5, 25));
            Values.Add(new XY(284, 27));
            Values.Add(new XY(284.5, 20));
            Values.Add(new XY(285, 18));
            Values.Add(new XY(285.5, 11));
            Values.Add(new XY(286, 7));
            Values.Add(new XY(286.5, 31));
            Values.Add(new XY(287, 41));
            Values.Add(new XY(287.5, 47));
            Values.Add(new XY(288, 59));
            Values.Add(new XY(288.5, 47));
            Values.Add(new XY(289, 43));
            Values.Add(new XY(289.5, 48));
            Values.Add(new XY(290, 65));
            Values.Add(new XY(290.5, 101));
            Values.Add(new XY(291, 143));
            Values.Add(new XY(291.5, 81));
            Values.Add(new XY(292, 34));
            Values.Add(new XY(292.5, 4));
            Values.Add(new XY(293, 9));
            Values.Add(new XY(293.5, 11));
            Values.Add(new XY(294, 11));
            Values.Add(new XY(294.5, 6));
            Values.Add(new XY(295, 8));
            Values.Add(new XY(295.5, 6));
            Values.Add(new XY(296, 14));
            Values.Add(new XY(296.5, 10));
            Values.Add(new XY(297, 20));
            Values.Add(new XY(297.5, 14));
            Values.Add(new XY(298, 18));
            Values.Add(new XY(298.5, 24));
            Values.Add(new XY(299, 15));
            Values.Add(new XY(299.5, 28));
            Values.Add(new XY(300, 25));
            Values.Add(new XY(300.5, 36));
            Values.Add(new XY(301, 45));
            Values.Add(new XY(301.5, 58));
            Values.Add(new XY(302, 84));
            Values.Add(new XY(302.5, 137));
            Values.Add(new XY(303, 208));
            Values.Add(new XY(303.5, 562));
            Values.Add(new XY(304, 1217));
            Values.Add(new XY(304.5, 2349));
            Values.Add(new XY(305, 4154));
            Values.Add(new XY(305.5, 5904));
            Values.Add(new XY(306, 6140));
            Values.Add(new XY(306.5, 4565));
            Values.Add(new XY(307, 2914));
            Values.Add(new XY(307.5, 1978));
            Values.Add(new XY(308, 1278));
            Values.Add(new XY(308.5, 607));
            Values.Add(new XY(309, 528));
            Values.Add(new XY(309.5, 309));
            Values.Add(new XY(310, 153));
            Values.Add(new XY(310.5, 15));
            Values.Add(new XY(311, 4));
            Values.Add(new XY(311.5, 2));
            Values.Add(new XY(312, 1));
            Values.Add(new XY(312.5, 5));
            Values.Add(new XY(313, 2));
            Values.Add(new XY(313.5, 3));
            Values.Add(new XY(315, 4));
            Values.Add(new XY(316, 1));
            Values.Add(new XY(316.5, 1));
            Values.Add(new XY(317, 1));
            Values.Add(new XY(317.5, 1));
            Values.Add(new XY(318, 1));
            Values.Add(new XY(318.5, 1));
            Values.Add(new XY(319, 1));
            Values.Add(new XY(319.5, 1));
            Values.Add(new XY(320.5, 2));
            Values.Add(new XY(323, 1));
            Values.Add(new XY(323.5, 2));
            Values.Add(new XY(324.5, 1));
            Values.Add(new XY(325, 1));
            Values.Add(new XY(325.5, 1));
            Values.Add(new XY(326, 2));
            Values.Add(new XY(326.5, 1));
            Values.Add(new XY(327, 1));
            Values.Add(new XY(328, 2));
            Values.Add(new XY(332.5, 1));
            Values.Add(new XY(335, 1));
            Values.Add(new XY(338.5, 1));
            Values.Add(new XY(339, 1));
            Values.Add(new XY(341, 1));
            Values.Add(new XY(347.5, 1));
            Values.Add(new XY(348, 1));
            Values.Add(new XY(349, 2));
            Values.Add(new XY(350, 2));
            Values.Add(new XY(351, 3));
            Values.Add(new XY(352, 2));
            Values.Add(new XY(353, 1));
            Values.Add(new XY(353.5, 2));
            Values.Add(new XY(354, 3));
            Values.Add(new XY(354.5, 2));
            Values.Add(new XY(355, 5));
            Values.Add(new XY(355.5, 1));
            Values.Add(new XY(357, 1));
            Values.Add(new XY(363, 1));
            Values.Add(new XY(364, 1));
            Values.Add(new XY(372, 1));
            Values.Add(new XY(373.5, 2));

        }




    }

    /// <summary>
    /// X Y 组合
    /// </summary>
    public class XY 
    {
        private object Misc;

        public double X { get; set; }
        public double Y { get; set; }

        public XY()
        {

        }
        public XY(double x, double y)
        {
            X = x;
            Y = y;
        }

        public int CompareTo(object obj)
        {
            XY xy = obj as XY;
            return X.CompareTo(xy.X);
        }

        public object Clone()
        {
            XY xy = new XY();
            xy.X = X;
            xy.Y = Y;
            return xy;
        }
        public override string ToString()
        {
            return $"{X}.{Y}";
        }

    }
}
