Живые диаграммы, как форматировать метки точек данных - PullRequest
0 голосов
/ 18 марта 2019

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

Пример графика

В этом случае информация выглядит аналогично, но каждая точка обычно может генерировать список от 1 до 5 элементов, поэтому я показываю этот список в виде строки.

Я сделал это, установив в Серии для свойства DataLabels значение true, а для свойства LabelPoint делегат, например:

    private static string GenerarEtiquetaHH(ChartPoint arg)
    {

        HoraProdVm h = arg.Instance as HoraProdVm;
        if (h == null)
            return null;
        else
            return h.TextContent;
    }

Где HoraProdVm - моя модель представления точки данных.

Теперь я хотел бы отформатировать этот текст, чтобы он выглядел лучше.

Если возможно, что-то вроде применения DataTemplate, чтобы я мог встроить DataGrid, было бы замечательно.

Возможно ли это?


Вот как я определяю свою модель представления точек данных:

public class ItemPerdida
{
    public string Subcategoria { get; set; }
    public decimal MinutosPerdida { get; set; }
    public string Observaciones { get; set; }
}

public class ListaPerdidasParaGrafica : ObservableCollection<ItemPerdida>
{
    public override string ToString()
    {
        StringBuilder sb = new StringBuilder();
        foreach (ItemPerdida item in this)
        {
            sb.Append($"{item.Subcategoria} - {item.MinutosPerdida} min\n");
            sb.Append($"{item.Observaciones}\n\n");
        }
        return sb.ToString();
    }

}

public class HoraProdVm
{
    public ListaPerdidasParaGrafica perdidas;
    public decimal OEE { get; set; }
    public decimal ProdAcumulada { get; set; }

    // Notice that TextContent is Used by LabelPoint delegate function.
    public string TextContent { get { return perdidas.ToString(); } }
}

Mapper выглядит так:

            var HoraProdVmMapper = Mappers.Xy<HoraProdVm>()
            .X((value, index) => index) 
            .Y(value => (int) value.ProdAcumulada);
        Charting.For<HoraProdVm>(HoraProdVmMapper);

Затем в XAML:

     <lvc:CartesianChart Series="{Binding sc}" >

        <lvc:CartesianChart.DataTooltip>
            <local:TooltipGraficaHoras />
        </lvc:CartesianChart.DataTooltip>

    </lvc:CartesianChart>

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

Заранее спасибо!

...