Как изменить состояние в itemRenderer на основе действия в другом itemRenderer? - PullRequest
0 голосов
/ 17 декабря 2008

У меня есть DataGridColumn с ItemRenderer, который расширяет компонент Box. По умолчанию отображается текстовый компонент. Когда пользователь нажимает на текстовый компонент, я меняю состояние, добавляя дочерний элемент PopUpMenuButton, и делаю текстовый компонент невидимым. Это отлично работает. Однако я хочу, чтобы только один PopUpMenuButton был виден в DataGrid за один раз (аналогично тому, как работает itemEditor). Я не хочу использовать itemEditor, потому что столкнулся со слишком многими проблемами, пытаясь заставить это работать в этом случае.

Я реализую IDropInListItemRenderer в моем itemRenderer, чтобы получить доступ к свойству listData, которое даст мне владельца (DataGrid), но я не знаю, как "отключить" состояние "редактирования" в других itemRenderers в DataGrid.

Как мне это сделать?

Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2008

Вот и мы. Я просто добавил прослушиватель событий изменения в listData.owner - если он запущен, я обновляю currentState до нуля. Работает как шарм. Гораздо проще, чем пытаться получить доступ к itemRenderers в столбце и сбросить их все. Лучше по производительности тоже.

private function label_clickHandler():void
{
    showEditor();
}

private function showEditor():void
{
    this.currentState = "editingMode";

    var ownerListBase:ListBase = ListBase(listData.owner);

    ownerListBase.addEventListener(ListEvent.CHANGE, ownerListBase_changeHandler);
}

private function ownerListBase_changeHandler(event:ListEvent):void
{
    this.currentState = null;

    var ownerListBase:ListBase = ListBase(listData.owner);

    ownerListBase.removeEventListener(ListEvent.CHANGE, ownerListBase_changeHandler);
}
...