Christian, you are right. Overriding the trigger() function works for me! However, we do not have this documented, and if I am not an exception here, many developers may run into this issue, so I keep the bug open, but I will update its description to say that we need documentation.
** Description changed: Often a CheckBox/Switch is used to show the value of a property outside of the CheckBox. For example: Switch { - id: hiddenSwitch - checked: !header.exposed - onClicked: header.exposed = !header.exposed + id: hiddenSwitch + checked: !header.exposed + onClicked: header.exposed = !header.exposed } At first look, this code may seem fine, but clicking the switch will trigger checked = !checked, which breaks the binding, so if header.exposed updates because of events happening outside of the switch, the switch will be out-of-sync. - Perhaps we need to add some properties to the CheckBox: - - CheckBox { - property Object bindTarget - property string bindProperty + --- update 2015-09-11 (thanks Christian) --- + It appears to work like this: + Switch { + id: hiddenSwitch + checked: header.exposed + function trigger() { header.exposed = !header.exposed; } } - and then the behavior of this: - Switch { - id: exposedSwitch - bindTarget: header - bindProperty: "exposed" - } - - can do what we want: the switch shows the value of "exposed", and - clicking the switch should update the "exposed" value (which in turn - will update the state of the switch). - - Note that in this case we could not track "!exposed", so if we need - that, some more complicated solution is needed. + so DON'T use the onClicked or onTriggered signal as you would expect, + but override the trigger() function. We need to document this. ** Changed in: ubuntu-ui-toolkit (Ubuntu) Status: Incomplete => Confirmed ** Changed in: ubuntu-ui-toolkit (Ubuntu) Importance: Undecided => High -- You received this bug notification because you are a member of Ubuntu Touch seeded packages, which is subscribed to ubuntu-ui-toolkit in Ubuntu. https://bugs.launchpad.net/bugs/1494387 Title: CheckBox needs to track external properties Status in ubuntu-ui-toolkit package in Ubuntu: Confirmed Bug description: Often a CheckBox/Switch is used to show the value of a property outside of the CheckBox. For example: Switch { id: hiddenSwitch checked: !header.exposed onClicked: header.exposed = !header.exposed } At first look, this code may seem fine, but clicking the switch will trigger checked = !checked, which breaks the binding, so if header.exposed updates because of events happening outside of the switch, the switch will be out-of-sync. --- update 2015-09-11 (thanks Christian) --- It appears to work like this: Switch { id: hiddenSwitch checked: header.exposed function trigger() { header.exposed = !header.exposed; } } so DON'T use the onClicked or onTriggered signal as you would expect, but override the trigger() function. We need to document this. To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu/+source/ubuntu-ui-toolkit/+bug/1494387/+subscriptions -- Mailing list: https://launchpad.net/~touch-packages Post to : touch-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~touch-packages More help : https://help.launchpad.net/ListHelp