spark のコンテナは、executeBindings を override していないので、下位コントロールまで伝播しない。

UIComponent - Adobe ActionScript® 3(AS3 Flex)API リファレンス
mx のコンテナは、executeBindings を override しているので、下位コントロールまで伝播するんだけど、
Container - Adobe ActionScript® 3(AS3 Flex)API リファレンス
spark のコンテナ(Group - Adobe ActionScript® 3(AS3 Flex)API リファレンス) は、executeBindings を override していないので、下位コントロールに伝播しません。
困った。。


例:
_source の件数によってボタンの使用可否を Binding で変更したい。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
  xmlns:s="library://ns.adobe.com/flex/spark"
  xmlns:mx="library://ns.adobe.com/flex/mx">
  <s:layout>
    <s:VerticalLayout />
  </s:layout>
  <fx:Script>
    <![CDATA[
      private var _source:Array = [];
      [Bindable]
      private function set canClick(value:Boolean):void {}
      private function get canClick():Boolean {
        return _source.length != 0;
      }
      private function refresh():void {
        sparkContainer.executeBindings(true);
        mxContainer.executeBindings(true);
      }
    ]]>
  </fx:Script>
  <s:Group id="sparkContainer">
    <s:Button content="SparkContainerButton" enabled="{canClick}" />
  </s:Group>
  <mx:Box id="mxContainer">
    <s:Button content="MXContainerButton" enabled="{canClick}" />
  </mx:Box>
  <s:Button content="Enable" click="_source = [1]; refresh();" />
  <s:Button content="Disable" click="_source = []; refresh();" />
</s:Application>

Flex の Binding は、setter 経由で値を変更しろって事なんかな。