Заставить всех средств визуализации элементов совершать свойства? - PullRequest
3 голосов
/ 06 марта 2010

У меня есть средство визуализации элементов, которое проверяет внешний источник для отображения информации.Если эта информация изменится, я хочу заставить все экземпляры средства визуализации элементов проверить ее.

Каков наилучший способ принудительно заставить все средства визуализации элементов в списке или сетке либо commitProperties, либо выполнить какой-либо другой метод?

  • Я читал, что сброс свойства grid.itemRenderer заставит их все инициализироваться.

  • Я также получил предложение рекурсивно пройти через все дочерние элементы сетки и вызвать invalidateProperties для всех компонентов UIC, которые я найду.

Какие-нибудь мысли?Альтернативы?

Ответы [ 3 ]

1 голос
/ 07 марта 2010

Помните, что в Flex Lists вы имеете дело с виртуализацией и утилизацией itemRenderer, поэтому обычно существуют только видимые на данный момент itemRenderers, и поэтому они действительно требуют обновления.

Следующие элементы работают для элементов управления на основе списка Spark:

for ( var i:int=0; i< sparkList.dataGroup.numElements; i++ )
            {
                var element:UIComponent = sparkList.dataGroup.getElementAt( i ) as UIComponent;
                if ( element )
                    element.invalidateProperties();
                else
                    trace("element " + i.toString() + " wasn't there");

            }

Если у вас есть 100 предметов, это обновит 10 видимых и проигнорирует виртуальный остаток.

Если вы работаете с mx DataGrid, возможно, вы захотите попробовать вариант этого, но он не использует виртуализацию DataGroup / Spark, поэтому у меня нет ответа для вас из головы.

P.S. Я делаю последние штрихи к полностью основанной на Spark DataGrid, я опубликую ссылку, когда я закончу.

0 голосов
/ 13 марта 2014
    public function updateAllRenderer():void
    {
        if (!list.dataGroup)
            return;
        if (!list.dataGroup.dataProvider)
            return;

        for ( var index:int=0; index< list.dataGroup.numElements; index++ )
        {
            var item:Object = list.dataGroup.dataProvider.getItemAt(index);
            var renderer:IVisualElement = list.dataGroup.getElementAt( index ) as IVisualElement;
            if ( renderer )
                list.updateRenderer( renderer, index, item );
        }
    }

отлично работает у меня

0 голосов
/ 14 апреля 2011

Датагруп имеет функцию getItemIndicesInView (), которая даст вам индикаторы всех средств визуализации элементов, которые видны Позвоните getElementAt с этими признаками.

Я также обычно расширяю ItemRenderer и добавляю следующее, что приведет к обновлению состояния средства визуализации элементов.

   public function invalidateSkinState():void
   {
      super.invalidateRendererState();
   }
...