In my current MT.D project I define a service layer that handles database access. I subclass DialogViewController to pass the id of the appropriate database row when e.g. opening a new form to edit the object. The new DVC is then responsible for any CRUD operations against the database via the service layer.
If the DVC updates the database, the service layer raises an event with an argument containing the modified object. The parent DVC event handler is notified of changes to the data and can update the UI appropriately. This relies on the MT.D sections and elements being available in the DVC so when creating e.g. elements I store them in a Dictionary that is indexed by the data object id.
For me this provides a sufficiently decoupled architecture and I assemble the app using the Funq DI framework (needs to be recompiled for MonoTouch). I'm interested to know how others handle this within a MT.D app.