Вы не можете поместить группу данных в ViewStack
напрямую ... элементы, которые нужно реализовать INavigatiorContent
.
Итак, это лучшее из того, что я могу придумать. Конечно, он не обрабатывает обновления до ArrayCollection
или что-то более продвинутое, чем это, но это только начало.
<s:VGroup>
<s:ButtonBar dataProvider="{tabs}" />
<mx:ViewStack id="tabs" resizeToContent="true" >
<mx:addedToStage>
<![CDATA[
for(var i:int = 0; i < dp.length; i++) {
var label:Label = new Label();
label.text = dp.getItemAt(i).text;
var context:NavigatorContent = new NavigatorContent();
context.label = dp.getItemAt(i).label;
context.addElement(label);
tabs.addChild(context);
}
]]>
</mx:addedToStage>
</mx:ViewStack>
</s:VGroup>
Если бы я действительно сделал это, я бы создал новый класс, производный от ViewStack
, который включает в себя свойство dataProvider
. Внутренне я бы слушал изменения в коллекции, чтобы она добавляла / удаляла элементы. Этот класс также включает свойство itemRenderer
, чтобы вы могли определить, как будут выглядеть вкладки.
Проблема в том, что с вкладками, как правило, у вас есть определенные представления, которые согласуются с данными. Возможно, вы захотите включить itemRendererFunction
, чтобы сделать отображение для вас.
Это было бы немного грязно и протекает ... но вы могли бы сделать это.