Отображение списка Flex ProgressBar с помощью itemrenderer - PullRequest
1 голос
/ 25 сентября 2010

Я хочу создать список индикаторов и соответственно обновить список.У меня есть данные группы в массиве как

 <mx:Array id="arr">
        <mx:Object label="Group One" min="0" max="200" currentValue="60" />
        <mx:Object label="Group Two" min="0" max="300" currentValue="50" />
 </mx:Array>

Значения в объекте массива указывают имя группы, минимальное, максимальное и текущее значение для группы (для использования в прогрессбар).

Я использовал список с «mx.controls.ProgressBar» в качестве itemRenderer как

<mx:List width="100%" dataProvider="{arr}"
        itemRenderer="mx.controls.ProgressBar"/>

Теперь мне нужно каждый раз, когда currentValue поле массива «arr» изменяется, я хочу обновитьИндикатор прогресса " прогресс " в currentValue (где минимальное и максимальное значение индикатора прогресса хранятся в массиве "arr")

Как я могу сделать то же самое.

Спасибо всем

Ответы [ 3 ]

1 голос
/ 26 сентября 2010

Хитрость заключается в том, чтобы установить режим индикатора выполнения на ручной, поскольку вы автоматически не прослушиваете прогресс загрузки данных. Вы хотите установить значение, чтобы индикатор выполнения мог обновляться сам по себе, поэтому руководство - это путь. Кроме того, проверьте это:

<s:Application minHeight="600" minWidth="955" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark">
<s:layout>
    <s:HorizontalLayout/>
</s:layout>
<fx:Declarations>
    <s:ArrayCollection id="arr">
        <fx:Object label="Group One" currentValue="20" max="200" min="0"/>
        <fx:Object label="Group Two" currentValue="50" max="300" min="0"/>
    </s:ArrayCollection>
</fx:Declarations>
<fx:Script>
    <![CDATA[
        private function updateArr():void {
            arr.getItemAt(0).currentValue = ns.value;
        }
    ]]>
</fx:Script>
<s:List dataProvider="{arr}"  itemRenderer="ProgressBarWithCurrentValue"/>
<s:NumericStepper id="ns" maximum="200" minimum="0" stepSize="10" value="20" change="updateArr()"/></s:Application>

Вот код itemrenderer, вы увидите режим как ручной:

<s:ItemRenderer autoDrawBackground="true" xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:s="library://ns.adobe.com/flex/spark">
<fx:Script>
    <![CDATA[
        private function updateCurrentValue():void {
            pb.setProgress(data.currentValue, data.max);
        }
    ]]>
</fx:Script>
<mx:ProgressBar id="pb" maximum="{data.max}" minimum="{data.min}" mode="manual" updateComplete="updateCurrentValue()"/></s:ItemRenderer>

Когда вы просто устанавливаете itemrenderer на индикатор выполнения, он автоматически пытается найти источник данных, но в вашем случае вы будете обновляться и обновляться. Итак, вам понадобится элементарщик, где вы можете выполнить некоторые операции.

1 голос
/ 26 сентября 2010

Я думаю, что ваши ProgressBars ничего не отображают, потому что все это неправильно. Средство визуализации элементов - это класс, который получает один элемент от поставщика данных через function set data(value:Object):void. Чтобы получить значения внутри ProgressBar, вы можете создать его подкласс, добавить функцию данных (getter и setter) и установить свойства оттуда - этот класс будет средством визуализации элементов.

Далее, не всегда гарантируется создание itemRenderers. Список создает их так, как они должны быть показаны, и хранит неиспользованные в пуле. Это означает, что вы не можете общаться с конкретным элементом списка - любой элемент из пула может сыграть свою роль (получение его данных). Чтобы изменить прогресс, вам нужно обновить поставщика данных и установить его заново.

0 голосов
/ 27 сентября 2010

привет всем
спасибо за ответы ..
После поиска в Google я нашел что-то похожее на то, что мне нужно здесь
http://www.flex -blog.com / progressbar-in-datagrid-пример /

Очень похоже на 2 приведенных выше ответа: @kubarium и @alxx ..
1. Используйте ItemRenderer для отображения ProgressBar внутри DataGrid.
2.Создайте DataProvider для DataGrid.
3. Создайте действие для запуска ProgressBar
4. Убедитесь, что ArrayCollection обновляется при каждом прогрессе ProgressBar.

...