Группа переключателей, общая для двух столбцов сетки данных в flex

В моем приложении у меня есть сетка данных, в которой для 2 столбцов мне нужно установить переключатель в качестве itemrenderer. Но дело в том, что если мы выберем один переключатель, следующий должен быть отменен. Так что я думал о достижении этого с помощью одного общая группа радио для обеих кнопок радио, но она не работает (обе кнопки радио выбираются). Но мне нужна одна кнопка радио, чтобы выбрать один раз. Любые предложения... Мой код следующим

<mx:DataGridColumn headerText="Buy Offer" dataField="buyoffer">
<mx:itemRenderer>
    <fx:Component>
        <mx:HBox>
            <mx:RadioButton id="chk1"   groupName="{components.BuyRadioGroup}" horizontalCenter="0"/>
        </mx:HBox>
    </fx:Component>
</mx:itemRenderer>

<mx:DataGridColumn headerText="Get Offer" dataField="getoffer">
<mx:itemRenderer>
    <fx:Component>
        <mx:HBox>
            <mx:RadioButton id="chk2" groupName="{components.BuyRadioGroup}" horizontalCenter="0"/>
        </mx:HBox>
    </fx:Component>
</mx:itemRenderer>

1 ответ

Я не думаю, что общая или совместно используемая группа радиокнопок является подходящим решением.

Передача одного RBG каждому визуализатору приведет к поведению, при котором изменение выбора для одного элемента (например, строки в сетке) повлияет на другие строки.

Вместо этого, как предложил Reboog711, рассмотрите возможность привязки выбранного значения каждой радиокнопки к соответствующему значению вашего доменного объекта.

Я хотел бы предложить многоразовый рендер, который может представлять возможные значения для type предложения. Это уменьшит дублирование кода и сделает изменения довольно простыми.

<mx:DataGrid dataProvider="{offerList}">
    <mx:columns>
        <mx:DataGridColumn headerText="Buy Offer">
            <mx:itemRenderer>
                <mx:Component>
                    <local:OfferTypeIR offerType="{OfferType.BUY}"/>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
        <mx:DataGridColumn headerText="Get Offer">
            <mx:itemRenderer>
                <mx:Component>
                    <local:OfferTypeIR offerType="{OfferType.GET}"/>
                </mx:Component>
            </mx:itemRenderer>
        </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

Добавьте соответствующее свойство к вашему объекту домена:

public class Offer
{
    [Bindable]
    public var type : OfferType = OfferType.BUY;
}

И в вашем рендерере:

<mx:HBox>

    <mx:Script>
        <![CDATA[

            [Bindable]
            public var offerType : OfferType;

            [Bindable("dataChange")]
            public function get offer() : Offer
            {
                return data as Offer;
            }

        ]]>
    </mx:Script>

    <mx:RadioButton selected="{offer.type == offerType}"
                    change="offer.type = offerType"/>

</mx:HBox>
Другие вопросы по тегам