2011-08-03 3 views
0

カスタムコンポーネントの中には、その内部にadvancedDataGridがあります。私はこのコンポーネントを再利用可能にしたいので、datagid selectionModeをコンポーネントプロパティとして設定する必要があります。私はこのような設定プロパティたいMXMLでカスタムコンポーネントdataGrid selectionModeプロパティとして

<comp:MyComp itemDataGridSelectionMode="singleCell" .../> 

インサイドMYCOMP ActionScriptを私はこのようなメタタグを持っている:

[Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
public var itemDataGridSelectionMode:String; 

私と、AdvancedDataGridのselectionModeにこのitemDataGridSelectionMode変数をバインドする方法を教えてください。

UPDATE:ここでは、小規模なテストアプリケーションに完全に動作するコードです:

<!--MyComp.mxml--> 
<?xml version="1.0" encoding="utf-8"?> 
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" width="638" height="500"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     [Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
     public function set itemsSelectionMode(value:String):void 
     { 
      this.adgItems.selectionMode = value; 
     } 

     public function get itemsSelectionMode():String 
     { 
      return this.adgItems.selectionMode; 
     } 
    ]]> 
</fx:Script> 
<mx:AdvancedDataGrid id="adgItems" designViewDataType="flat" width="100%" height="100%"> 
    <mx:columns> 
     <mx:AdvancedDataGridColumn headerText="Column 1" dataField="col1"/> 
     <mx:AdvancedDataGridColumn headerText="Column 2" dataField="col2"/> 
     <mx:AdvancedDataGridColumn headerText="Column 3" dataField="col3"/> 
    </mx:columns> 
</mx:AdvancedDataGrid> 
</s:Group> 

<!-- Application.mxml --> 
<?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" minWidth="955" minHeight="600" xmlns:comp="*"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 
<comp:MyComponent x="272" y="86" itemsSelectionMode="singleCell"/> 
</s:Application> 

エラー:無効な値:multipleRows。これは、singleRow、multipleRows、singleCell、multipleCellsのいずれかでなければなりません。

答えて

2

は、この操作を行います。

[Inspectable(enumeration="singleRow, multipleRows, singleCell, multipleCells", defaultValue="singleRow")] 
public function set itemDataGridSelectionMode(value:String):void 
{ 
    advancedDatagrid.selectionMode = value; 
} 

public function get itemDataGridSelectionMode():String 
{ 
    return advancedDatagrid.selectionMode; 
} 
+0

これは正しい方法だと思います。私はそれを試してみます。 –

+0

同じエラーが表示されます。それはsingleRowを必要としますが、他のものは必要としません。 –

+0

そして、何がエラーですか?あなたはデバッグを試みましたか? –

0

私は[Bindable]としてitemDataGridSelectionModeを設定して、それをAdvancedDataGridのselectionModeプロパティにバインドできると思います。

+0

を私はそれを試してみましたが、エラーを与える: 無効な値:multipleRowsを。これは、singleRow、multipleRows、singleCell、multipleCellsのいずれかでなければなりません。 –

+0

これが当てはまる場合は、@J_A_Xの提案によるsettersを試してください。 –

0

一つの方法は次のとおりです。

BindingUtils.bindProperty(datagridId, 'selectionMode', this, itemDataGridSelectionMode); 

ORの代わりに変数定義のセッターメソッドを使用します。カスタムコンポーネント内で公開VARを持って

+1

前者の解決法は、必要のない場所でバインディングを使用しているので、恐ろしいことです。後者は唯一の真の答えです。 –

関連する問題