Итак, заголовок говорит все.Создание Infragistics XamDataChart с программным обеспечением с несколькими столбцами.
У меня есть цикл, который пересекает графику, которые отправляются мне.
Каждый объект графа имеет одну или несколько серий в нем объектов, которые содержат метку, datapoint и подсказку.
Каждая серия должна быть отдельной строкой на графике.
Так, например, я мог бы иметь объект серии как
Series 1
Название: 2013
Объект
label-Jan Value-200 ToolTip-Value = 200
Объект
label-Feb Value-400 ToolTip-Value = 400
И вторая серия
Series 2
Название: 2014
Объект
label-Jan Value-100 ToolTip-Value = 100
Объект
label-Feb Value-300 ToolTip-Value = 300
каждой серии должны быть отдельный бар цвета на графике.
Несмотря на все мои усилия, я не могу сделать это программным путем.
Нужно предположить, что неизвестное количество серий возвращается с неизвестным количеством точек данных, поскольку этот элемент управления используется в нескольких точках.
Мой объект, который я храню каждую точку в
public class XamDataChartItem: INotifyPropertyChanged
{
private String _label;
public String Label
{
get { return _label; }
set { _label = value; }
}
private double _yPoint;
public double YPoint
{
get { return _yPoint; }
set { _yPoint = value; OnPropertyChanged("YPoint"); }
}
private String _ToolTip;
public String ToolTip
{
get { return _ToolTip; }
set { _ToolTip = value; OnPropertyChanged("ToolTip"); }
}
void OnPropertyChanged(String prop)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
хранить каждую точку в List<XamDataChartItem>
private List<XamDataChartItem> _dataCollection;
public List<XamDataChartItem> dataCollection
{
get { return _dataCollection; }
set { _dataCollection = value; OnPropertyChanged("dataCollection"); }
}
Мой измученный метод, который не создает несколько баров, и не ставит правильные метки на оси X
ChartControl control = o as ChartControl;
if (control == null)
return;
ElementList list = args.NewValue as ElementList;
if (list != null && list.Count >= 1)
{
control.dataCollection.Clear();
foreach (Element data in list)
{
List<XamDataChartItem> NewBarSeries = new List<XamDataChartItem>();
CategoryXAxis catX = new CategoryXAxis()
{
Name = "catX",
ItemsSource = NewBarSeries,
Label = "{}{Label}",
Gap = 10
};
NumericYAxis numY = new NumericYAxis()
{
Name = "numY",
ToolTip = "{Binding ToolTip}"
};
foreach (var point in (data["DataPoints"] as ElementList))
{
var label = point["Label"];
var value = point["Value"];
var toolTip = point["ToolTip"];
var legend = data["LegendLabel"];
if (legend != null)
{
control.Legend = legend.ToString();
control.isLegVis = true;
}
XamDataChartItem item = new XamDataChartItem()
{
Label = label.ToString(),
YPoint = double.Parse(value.ToString()),
ToolTip = toolTip.ToString()
};
NewBarSeries.Add(item);
}
ColumnSeries cs = new ColumnSeries()
{
Title = data["LegendLabel"],
ItemsSource = NewBarSeries,
ValueMemberPath = "YPoint",
XAxis = catX,
YAxis = numY
};
control.masterCollection.Add(NewBarSeries);
if (control.chart.Axes.Count == 0)
{
control.chart.Axes.Add(catX);
control.chart.Axes.Add(numY);
}
control.chart.Series.Add(cs);
//Hack to refresh the DataContext
//For some reason Observable Collections don't update with this control
//You cannot set the Mode it's read only
//Invoking OnPropertyChanged from control doesn't work either
control.DataContext = null;
control.DataContext = control;
}
Это аналогичный предполагаемый outcom e