Flex ChangeWatcher привязан к отрицательному условию

У меня есть привязываемый получатель в компоненте, который сообщает мне, когда работает [скрытый] таймер. У меня также есть контекстное меню, которое, если этот таймер запущен, должно отключить один из пунктов меню. Можно ли создать ChangeWatcher, который следит за отрицательным условием связываемого свойства / получателя и изменяет свойство enabled пункта меню?

Вот основные методы, которые я пытаюсь связать вместе:

Класс А:

[Bindable]
public function get isPlaying():Boolean {
    return (_timer != null) ? _timer.running : false;
}

Класс B:

private var _playingWatcher:ChangeWatcher;
public function createContextMenu():void {
    //...blah blah, creating context menu
    var newItem:ContextMenuItem = new ContextMenuItem();
    _playingWatcher = BindingUtils.bindProperty(newItem, "enabled", _classA, "isPlaying");
}

В приведенном выше коде у меня обратный случай: когда isPlaying () истинно, пункт меню включен; Я хочу, чтобы он был включен только тогда, когда условие ложно.

Я мог бы создать второй получатель (есть и другие привязки, которые полагаются на текущий получатель), чтобы вернуть обратное условие, но для меня это звучит некрасиво:

[Bindable]
public function get isNotPlaying():Boolean {
    return !isPlaying;
}

Возможно ли это, или есть другой подход, который мне полностью не хватает?


person bedwyr    schedule 07.01.2011    source источник


Ответы (2)


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

person shaunhusain    schedule 07.01.2011
comment
bind property is blind - да, я этого боялся :) - person bedwyr; 08.01.2011

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

person kamcknig    schedule 27.03.2017