Почему моя круговая диаграмма LiveCharts создает 3 диаграммы вместо 3 срезов

У меня есть таблица данных, которую я хочу показать на круговой диаграмме. Amount будут значениями, а MsgType — метками. На диаграмме должно быть 3 среза. Таблица выглядит так:

MsgType    Amount
-----------------
3          4500
2          1262
1          3956

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

    public SeriesCollection MsgTypeDoughnut { get; set; }
    public List<int> Lables { get; set; }


    public MsgTypeProportion()
    {
        InitializeComponent();

        List<DataMsgType> dataMsgTypes = GetMsgType();
        ChartValues<int> values = new ChartValues<int>();
        Lables = new List<int>();
        foreach (var item in dataMsgTypes)
        {
            values.Add(item.Amount);
            Lables.Add(item.MsgType);
        }

        MsgTypeDoughnut = new SeriesCollection
        {
            new PieSeries
            {
                Title = "Amount",
                Values = values,
                DataLabels = true
            }
        };

        DataContext = this;
    }

    public List<DataMsgType> GetMsgType()
    {
        DataSet DS = new DataSet();
        DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter MsgTypeta = new DataSetTableAdapters.spMessages_GetMsgTypeOverviewTableAdapter();
        MsgTypeta.Fill(DS.spMessages_GetMsgTypeOverview);
        List<DataMsgType> dataMsgTypes = new List<DataMsgType>();
        foreach (DataRow row in DS.Tables["spMessages_GetMsgTypeOverview"].Rows)
        {
            dataMsgTypes.Add(new DataMsgType() { MsgType = (int)row["MsgType"], Amount = (int)row["Amount"]});
        }

        return dataMsgTypes;
    }

Но это создает 3 новых круговых диаграммы, а не 3 фрагмента в 1 круговой диаграмме. Я нашел этот вопрос how-to-create-a-pie-chart -with-livecharts, и решение состоит в том, чтобы иметь несколько PieSeries, но я не могу понять, как это сделать, используя строки из моей таблицы.


person K.Luth    schedule 07.03.2019    source источник


Ответы (1)


Я нашел ответ вместо того, чтобы делать:

foreach (var item in dataMsgTypes)
    {
        values.Add(item.Amount);
        Lables.Add(item.MsgType);
    }

    MsgTypeDoughnut = new SeriesCollection
    {
        new PieSeries
        {
            Title = "Amount",
            Values = values,
            DataLabels = true
        }
    };

Я должен был сделать:

MsgTypeDoughnut = new SeriesCollection();
foreach (var item in dataMsgTypes)
        {
            MsgTypeDoughnut.Add(new PieSeries
            {
                Title = "test",
                Values = new ChartValues<ObservableValue> { new ObservableValue(item.Amount) },
                DataLabels = true,
                Stroke = System.Windows.Media.Brushes.Transparent
            });
            Lables.Add("MsgType " + (item.MsgType));
        }

Таким образом, данные в строках моей таблицы добавляются в круговую диаграмму в виде новых срезов, а не новых круговых диаграмм.

person K.Luth    schedule 07.03.2019