2009-04-29 22 views
7

私はComboBoxを持っています、dataProviderはComboBoxにオプションのリストを与えるラベルプロパティを持つオブジェクトの配列です。Flex:ComboBoxのselectedItemを変数にバインドする方法はありますか?

mySelectedItemのような変数を持ち、ComboBoxのselectedItemをバインドする方法はありますか?変更された場合、ComboBoxのselectedItemは何でも変更されますか?

これは意味があると思います。

ありがとうございます!

答えて

16

はい、ComboBoxのselectedItemプロパティはバインド可能です。

それはこのような何か行くだろう:あなたのASで

<mx:ComboBox selectedItem="{mySelectedItem}"> 
</mx:ComboBox> 

:mySelectedItemへ

[Bindable] 
var mySelectedItem:Object; 

変更はコンボボックスに表示されるはずですが。 mySelectedItemによって参照される項目がコンボボックスのdataProviderに存在しない場合、エラーが発生することがあります。表面には

2

Changeイベントにイベントリスナーを使用し、そこで処理します。

// update a label item's text with that of the Combobox's selectedItem 
private function changeEvt(event:Event):void { 
    label.text =event.currentTarget.selectedItem.label + " " + 
} 
9

、それは同じくらい簡単です:あなたは、データプロバイダ内のアイテムのいずれかにdefaultItemを(それがに[Bindable]であることを確認してください)に設定すると、それがコントロールを更新します

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{defaultItem}"/> 

しかし、この方法には問題があります。 currentDefaultItemが常にmyDataProviderの後で変更されない限り、dataProviderへのバインディングは選択を元に戻し、デフォルト(リストの最初の項目)に戻ります。

これを回避する方法の1つは、selectedItemを提供する呼び出しにdataProviderを含めることによって、selectedItemをdataProviderの後にリバウンドさせることです。これは何

<mx:ComboBox id="myComboBox" 
    dataProvider="{myDataProvider}" 
    selectedItem="{getSelectedItem(myComboBox.dataProvider, defaultItem)}"/> 

はのSelectedItemはリバウンドになり確実であるときcurrentDefaultItem変更、またはdataProviderの変化した後のいずれか。私は自分で他のソリューションに興味を持っています。

1

私はこれがドキュメントに記載されていることを知っています。 selectedItemを変更すると、変更リスナーが起動します。しかし、私にとっては、これは起こりません。誰もが同じ動作に遭遇する?

+0

が、あなたのアイデアを得ます。 – Panzercrisis

0

これは偉大なアプローチのようになります。値が書き込み可能属性を作る:あなたはコンボボックスを拡張する気にしない場合は、このような何かを行うことができ、 http://flex.sys-con.com/node/312098

1

か。 これは(申し訳ありませんが、試合の識別は、オブジェクトタイプによって異なります)擬似コードである - 私はselectedIndexのでそれを気づいた...

public class IndexRetainingComboBox extends ComboBox 
{ 
    public function IndexRetainingComboBox() 
    { 
     super(); 
    } 

    override public function set dataProvider(value:Object):void 
    { 
     var originalSelection:Object = this.selectedItem; 
     super.dataProvider = value; 
     var newIdx:uint = [find originalSelection idx in combobox or return 0 ] 
     this.selectedIndex = newIdx; 
    } 
} 
関連する問題