A computer-implemented method of asynchronously binding data from a data source to a data target at a computer system including a processor, the computer system executing a multi-threaded application that displays a user interface via a user interface thread, the method comprising: determining, by the user interface thread, that data to which an element of the user interface is bound is to be updated; accessing, by the user interface thread, a local cache of the computing system to determine whether updated data is stored in the local cache, the updated data corresponding to an update to the data to which the element of the user interface is bound; in response to the user interface thread determining that the local cache does not store updated data for the user interface element, requesting, by the user interface thread, a separate thread to retrieve updated data from a data source to which the element of the user interface is bound, such that the user interface thread continues execution without blocking until updated data is obtained; requesting, by the separate thread, the updated data from the data source; upon receiving the updated data, storing, by the separate thread, the updated data in the local cache; notifying, by the separate thread, the user interface thread that the updated data has been stored in the local cache; receiving, by the user interface thread, a notification; and accessing, by the user interface thread, the local cache to retrieve the updated data wherein the user interface thread accesses the local cache to retrieve the updated data in response to a timer expiring, the timer representing a duration of time since the user interface thread accessed the local cache to retrieve the updated data. determining, by the user interface thread, that data to which an element of the user interface is bound is to be updated; accessing, by the user interface thread, a local cache of the computing system to determine whether updated data is stored in the local cache, the updated data corresponding to an update to the data to which the element of the user interface is bound; in response to the user interface thread determining that the local cache does not store updated data for the user interface element, requesting, by the user interface thread, a separate thread to retrieve updated data from a data source to which the element of the user interface is bound, such that the user interface thread continues execution without blocking until updated data is obtained; requesting, by the separate thread, the updated data from the data source; upon receiving the updated data, storing, by the separate thread, the updated data in the local cache; notifying, by the separate thread, the user interface thread that the updated data has been stored in the local cache; receiving, by the user interface thread, a notification; and accessing, by the user interface thread, the local cache to retrieve the updated data wherein the user interface thread accesses the local cache to retrieve the updated data in response to a timer expiring, the timer representing a duration of time since the user interface thread accessed the local cache to retrieve the updated data.