2013-05-17 114 views
1

我正在使用Flex/Air開發iPad應用程序。 我有自定義列表項呈示器中的數據綁定問題。DataBinding在自定義列表中無法正常工作itemrenderer

我有一個類的集合列表作爲數據提供者。 每個類都啓用了靜態屬性。我使用項目渲染器顯示每個類,其中啓用了Class屬性時啓用了項目渲染器。

的類看起來像:

public class MyClass 
{ 
    public static const var name:String = "My Class"; 
    private static var enabled:Boolean = false; 


    [Bindable] 
    public static function get enabled():Boolean 
    { 
     return enabled; 
    } 

    public static function set enabled(value:Boolean):Boolean 
    { 
     enabled = value; 
    } 

} 

然後,我有名單:

<list dataProvider={new ArrayCollection([MyClass])} itemRenderer="CustomItemRenderer"/> 

而且CustomItemRenderer看起來像這樣:

<s:ItemRenderer autoDrawBackground="false" enabled={data.enabled}> 

    <s:label text={data.name}/> 

<s:/ItemRenderer> 

所以,當我改變enabeled MyClass的屬性,列表不會更新。 項目渲染器仍然是disabeled。

MyClass.enabeled = true; 

你有什麼想法是什麼問題?

預先感謝您! 伊萬

+1

請分享一些代碼。例如,我不知道這是什麼意思「我使用項目渲染器顯示每個類,其中啓用了Class屬性時啓用了項目渲染器。」你不能改變類的屬性 - 除非它們是靜態屬性,在這裏可能不是這種情況。你必須在類的一個實例上改變它們。你在改變什麼樣的屬性;你怎麼改變它們?你可能需要在ArrayCollection上調用itemUpdated – JeffryHouser

+0

你好,我已經分享了一些例子。我希望它能幫助你更好地理解我的問題。感謝您的關注。 –

回答

1

試試這個(我編輯的代碼,而無需IDE,它應該是正確的想法):

// to dispatch a custom event your class needs to extends the EventDispatcher Class. 
public class MyClass extends EventDispatcher 
{ 
    public static const var name:String = "My Class"; 
    private static var _enabled:Boolean = false; 


    // getter & setter with dispatchEvent could not be static... 
    // instead the getter/setter for enabled, will change the static _enabled value.  
    [Bindable(event="enabledChange")] 
    public function get enabled():Boolean 
    { 
     return _enabled; 
    } 

    public function set enabled(value:Boolean):void 
    { 
     _enabled = value; 
     dispatchEvent(new Event("enabledChange")); 
    } 

} 
+0

謝謝你的回覆。 我需要靜態訪問setter:MyClass.enabled; 正如您所見,列表的dataProvider是一個帶有類的集合。 然後itemRenderer的數據屬性是一個類,我需要訪問此類的屬性,但不使用類的實例 –

+0

Afaik在actionscript中不可能dispatchEvent靜態類/屬性...所以你可能需要改變你的邏輯.. – Marcx

+0

我明白了!感謝您花時間幫助我! –

相關問題