为什么BindingUtils.bindProperty()不能立即工作?

cam*_*mil 2 apache-flex

我在加载的Flash文件和flex中的主应用程序之间有双向绑定.

    BindingUtils.bindProperty(this, "micGainValue", audioPublisherApp, "micVolume");
    BindingUtils.bindProperty(audioPublisherApp, "micVolume", this, "micGainValue");
    micGainValue=75;
Run Code Online (Sandbox Code Playgroud)

但是,micGainValue的设置不会在flash文件中设置micVolume.我改为尝试在200帧之后设置micGainValue,现在它确实设置了micVolume.有没有办法测试这些属性是否绑定,所以设置后的值?

编辑:

flash文件实际上是在改变值.现在的问题是,为什么设置micVolume不会改变micGainValue.

这是我加载的flash文件中的代码:

[Bindable]

    public function get micVolume():Number{
        if(microphone!=null)
            return microphone.gain;
        return 0;
    }

    public function set micVolume(val:Number):void{
        if(microphone!=null)
            microphone.gain=val;
    }
Run Code Online (Sandbox Code Playgroud)

[Bindable]

    BindingUtils.bindProperty(this, "micGainValue", audioPublisherApp, "micVolume");
    BindingUtils.bindProperty(audioPublisherApp, "micVolume", this, "micGainValue");
    micGainValue=75;
Run Code Online (Sandbox Code Playgroud)

小智 5

Flex数据绑定是使用事件实现的.当您使用BindingUtils.bindProperty时,幕后发生的事情是将事件侦听器添加到目标对象以侦听PropertyChangeEvent类型的事件

如果目标对象在更改时未调度PropertyChangeEvent,则永远不会触发绑定.

将[Bindable]属性添加到Flex中的属性时,您正在做的是告诉框架在更改该属性时调度PropertyChangeEvent.如果您不包含该属性(或将其放在类上),则不会调度该事件并且不会发生绑定.

这就是为什么你的绑定工作从Flex到Flash而不是相反的方式 - 当Flex对象在更改时调度所需的事件但闪存对象不是.

这是PropertyChangeEvent的信息

就个人而言,对于Flash - > Flex,我会在flash部件更改其值并使用处理程序更新Flex部件中的可绑定对象时调度我自己的事件.然后,您可以绑定其他Flex内容.