Я подробно остановился на ответе Луиса Б., чтобы он динамически отражался на поставщике данных линейной диаграммы. Таким образом, легенда показывает только те поля, которые доступны на графике. Вроде классный.
Вот то, что я придумал, и это хорошо работает:
protected function onUpdateLinechartComplete(e:FlexEvent):void
{
//empty legend for fresh display
var legendArray:Array = new Array();
legend1.dataProvider = legendArray;
//filter Legend data so that only LineSeries with data can be shown
for(var i:int=0; i< linechart1.legendData.length; i++) {
//if data is found in the line series, let's add it to the chart legend data provider, so it can be displayed in the legend
if (linechart1.legendData[i].element.items.length != 0) {
legendArray.push(linechart1.legendData[i]);
}
}
legend1.dataProvider = legendArray;
legend1.direction = "vertical";
}
//in the page Initialize function, I add a listener event to the linechart component for when the legend update completes so it can filter lineseries on the legend's dataprovider in [onUpdateLegendComplete]
linechart1.addEventListener(FlexEvent.UPDATE_COMPLETE, onUpdateLinechartComplete);
В итоге мне пришлось использовать EventHandler и подключить прослушиватель событий к самой линейной диаграмме. Это потому, что я испытывал "условия гонки" с поставщиком данных легенды. Иногда это будет работать, иногда нет. Использование прослушивателя событий устраняет эту проблему и фильтрует легенду только после завершения загрузки данных линейной диаграммой.
ЧУВСТВУЙТЕ БЕСПЛАТНО, ЧТОБЫ ОТВЕТИТЬ НА ЭТО ОТВЕТ