By creating a hidden @Bindable
property (mprop
) and providing only a getter and setter for prop
without an actual property named prop
, I was able to use your syntax unchanged. This works for everything except where the property is set to the same value (3 out of 4 changes detected):
import java.beans.*
import groovy.beans.*
int changes = 0
def obj = Binding.newInstance()
obj.propertyChange = { changes++ }
obj.prop = "1st change" // change recorded
obj.twoChanges() // two changes recorded
obj.prop = obj.prop // no change recorded
assert changes == 4 // fails: changes is 3
class Binding {
@Bindable String mprop // changed from prop to mprop
def setProp(x) {setMprop(x)} // new setter
def getProp() {getMprop()} // new getter
def twoChanges() {
prop = "2nd change"
this.prop = "3rd change"
}
}