Краткий ответ - использовать этот код:
var barSerie:BarSeries = new BarSeries();
barSerie.dataProvider = model.myList;
barSerie.xField = "myCalculatedValue";
var allSeries:Array = barchart.series;
allSeries.push(barSerie);
barchart.series = allSeries;
ДОЛГО ответ, чтобы дать вам понимание того, как это работает:
Способ, которым Flex знает, когда обновлять компонент пользовательского интерфейса, для которого создаются данные, такие как диаграмма, заключается в свойстве function set dataProvider
или эквивалентном (в данном случае series
).
Вот код из mx.charts.chartClasses.ChartBase
:
public function set series(value:Array /* of Series */):void
{
value = value == null ? [] : value;
_userSeries = value;
var n:int = value.length;
for (var i:int = 0; i < n; ++i)
{
if (value[i] is Series)
{
(value[i] as Series).owner = this;
}
}
invalidateSeries();
invalidateData();
legendDataChanged();
}
Обратите внимание, что соответствующие "недействительные" методы вызываются в конце метода set.
Если вы говорите barChart.series.push(x)
, метод set series
никогда не вызывается, только getter
. Поэтому, чтобы заставить диаграмму узнать, что в серии произошли изменения, необходимо присвоить серии новое значение.
Стоит отметить, что даже присвоение серии самому себе вызовет недействительность, хотя это не очень хорошее кодирование
barChart.series = barChart.series