Sertious problem with databinding and datastore write-through

First problem.

I have a simple project - two fields (first, last) with a collection “Addresses”. The UI fields are bound to the corresponding fields in the collection.

I have two buttons
Restart:
on mouseUp pButton
datastoreSetCurrentRecordOfCollection “Addresses”, 1
end mouseUp
and Next:
on mouseUp pButton
local t
put datastoreCurrentRecordOfContainer(“collection”,“Addresses”) into t
if t < datastoreGetNumberOfRecordsInCollection(“Addresses”) then add 1 to t
datastoreSetCurrentRecordOfCollection “Addresses”, t
end mouseUp

If I do a “restart” it then displays the first data record in the two fields.
Changing one of those fields causes the datastore to be updated (verified both by the data viewer and by clicking ‘next’ and then ‘restart’.

BUT if I change the UI field and immediately click on next, the datastore is not updated (again verified both by data viewer and ‘next’ and ‘restart’).

SO any time there is a user interaction it is open to race conditions.

How should this be resolved ?

Second problem.
I then add a “simple list” widget, and bind the title & subtitle to First and Last fields,

Now, if I change the UI field, it does NOT get written to the datastore. (It does of course change on-screen, but ‘next’ and ‘restart’ shows that the newly typed value was not written to the datastore.