@KillerSmath Its working! NOTIFY did the trick. The final touch that I also included was to use a Q_INVOKABLE getModuleAt(i) instead of a Q_INVOKABLE getTextBodyAt(i); this allowed me direct access to the DataModule's property:
In the end everything was fine with the example above.
I just had to update and release my translation files, because in the meantime I changed the name of a .qml file, and the filename is directly linked into the .ts files created by linguist and used by Qt.
I feel a bit ashamed but yes, it was really trivial and kinda stupid :)
I eventually found a solution/workaround to the problem. I am posting it here if anybody ever needs it.
The new approach was to create a C++ model derived from QAbstractItemModel and reimplementing the necessary functions. This model is essentially a filtering proxy for Model_A and Model_B.
The filtering is implemented in QAbstractItemModel::getData() and the elements are exposed through a reimplementation of QAbstractItemModel::roleNames().
For this filtering proxy to change state when the underlying data changes the dataChanged() signals of the underlying models was connected to a method in the proxy model computing the correct index invoking emit dataChanged(index).
The QML delegate reuse was then implemented as follows:
// some rendering of Model_A
property var propertyDelegateB: model.propertyDelegateB
// mulitple properties possible
This worked for my use case as I needed only one element in the model. For multiple elements this approach might not be ideal.