Живые диаграммы — наблюдаемая ценность

Я использую LiveCharts для отображения гистограммы с уровнями запасов. Названия единиц и уровни запасов хранятся в базе данных доступа, и эти значения извлекаются и помещаются в списки.

Единственное, что действительно должно измениться, — это стоимость акций, поэтому я хотел отслеживать изменения акций и автоматически обновлять базу данных, предоставляя несколько оперативных данных.

Я хочу, чтобы диаграмма автоматически обновлялась при изменении значения (акции) в базе данных. Я не хочу обновлять всю таблицу, а только значение, которое изменилось, чтобы анимация отображалась на отдельных полосах при их изменении.

У меня есть следующий код для загрузки значений моей базы данных в базу данных:

    string[] units = new string[30];
    List<string> subs = new List<string>();
    List<string> line = new List<string>();
    List<double> min = new List<double>();
    List<double> max = new List<double>();
    List<ObservableValue> stock = new List<ObservableValue>();

    bool initial = true;
    private void LoadData()
    {
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\subDB.mdb";

        using (OleDbConnection conn = new OleDbConnection(strConn))
        {
            conn.Open();
            string strSQL = "SELECT * FROM Units";
            OleDbCommand command = new OleDbCommand(strSQL, conn);

            using (OleDbDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    if (initial)
                    {
                        subs.Add(reader["Sub"].ToString());
                        line.Add(reader["Line"].ToString());
                        min.Add(Convert.ToDouble(reader["Minimum"]));
                        max.Add(Convert.ToDouble(reader["Maximum"]));
                    }
                        stock.Add(reader["Stock"]);
                }
            }
            initial = false;
        }
    }

Настройка диаграммы:

    public void chartSetup()
    {
        cartesianChart1.Series = new SeriesCollection
        {
            new ColumnSeries
            {
                Title = "Total",
                Fill = System.Windows.Media.Brushes.Crimson,                 
                Values = new ChartValues<ObservableValue>(stock)
            }
        };
        cartesianChart1.AxisX.Add(new Axis
        {
            Title = "Unit",
            FontSize = 15,
            Separator = new Separator
            {
                Step = 1,
                IsEnabled = false //disable it to make it invisible.
            },
            LabelsRotation = 45,
            Labels = new ChartValues<string>(subs)
        });

        cartesianChart1.AxisY.Add(new Axis
        {
            Title = "Total",
            FontSize = 15,
            ShowLabels = true,
            LabelFormatter = value => value.ToString("N")
        });
    }

Моя проблема в том, что я не могу реализовать ObservableValue для акций. Я получаю сообщение: «Невозможно преобразовать объект в LiveCharts.Defaults.ObservableValue.


person J. James    schedule 22.11.2018    source источник


Ответы (1)


Значение LiveCharts Observable ожидает инициализации с double, поэтому вам нужно преобразовать значение stock в это и добавить в список ObservableValue, а не необработанное значение::

stock.Add(new ObservableValue(Convert.ToDouble(reader["Stock"])));
person stuartd    schedule 22.11.2018
comment
Не удается преобразовать из «двойного» в LiveCharts.Defaults.ObservableValue, когда я пытаюсь это сделать. - person J. James; 22.11.2018
comment
Спасибо, это определенно работает! Но диаграмма не обновляется при изменении значения. - person J. James; 22.11.2018