Described are data source objects, which provide data from a resource to an application program, such as a data collection for binding to user interface elements. A data source that matches a resource type is specified by an application program, such as via markup language (e.g., XAML). At runtime, a data source object is instantiated as an indirection between the resource and the application data, e.g., the data collection bound to a user interface element. The data source object retrieves data from the data provider resource via asynchronous and/or background communication operations, and with marshaling the data as necessary to deliver it on the original user interface context. Data sources provide integration to major data models, including CLR objects, XML, Sql/ADO, and WinFS, supporting straightforward declarative and parameterized queries while allowing customized behavior using code for more advanced scenarios. An application can define its own customized data source objects.