的問題是,ArrayCollection
的方法不是[綁定]。在MXML大括號表達式中,屬性鏈中的所有內容都必須是[Bindable]。
通常,Flex編譯器會在大括號表達式中的某個屬性不是[Bindable]時發出警告。當其中一個屬性是一個函數時,不會生成警告,按照我的設計,因爲它可能是一個有用的快捷方式。
函數可以標記爲[Bindable]。只要在定義函數的類的某個地方調度了「綁定」事件。看看ListCollectionView
的源代碼 - 這是實際定義方法的類。
您會看到方法未標記爲[Bindable],而對比方法是getItemAt()
。
你可以用幾種不同的方法解決你的問題。這裏有一個調度自定義綁定事件:
[Bindable("dataTypesUsedChanged")]
private var dataTypesUsed:ArrayCollection = new ArrayCollection();
private function someMethodThatUpdatesTheCollection():void
{
dataTypesUsed.addItem("foo");
// addItem will make the collection dispatch CollectionEvent.COLLECTION_CHANGE
dispatchEvent(new Event("dataTypesUsedChanged")
}
<s:CheckBox visible={dataTypesUsed.contains('foo')} />
不同的是,當你沒有在[綁定]元數據指定事件名稱,Flex使用默認的「的PropertyChanged」事件。
在你的場景中,沒有任何事情調度「propertyChange」事件來觸發綁定(B/C屬性字面上沒有改變)。此外,集合派發的「collectionChange」事件未被使用,因此方法未標記爲[Bindable]。
據我所知,在ArrayCollection上沒有'contains()'方法這樣的事情。 – RIAstar
有,它是從'ListCollectionView'派生的。 – ndm
@ndm謝謝指出, – RIAstar