До сих пор мне удалось создать график, который показывает некоторую информацию для каждой точки данных в серии. Я показываю так:
Пример графика
В этом случае информация выглядит аналогично, но каждая точка обычно может генерировать список от 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>
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Заранее спасибо!