After further investigation, I've found that the EntityBase2.ParentCollection is used in the .CancelEdit to remove the entity from the collection when the entity has been added using entityCollection.AddNew (maybe this is the way databinding add a new item to an existing collection...)
In my situation this shouldn't matter, because I never let the databinding add new entities; I always add new entity via explicit code, using EntityCollection.Add
But I didn't liked the idea of doing something that might not work...
So, following the Walaa's suggestion, I've used a single entityCollection.
The top grid is bound to the entityCollection.
The bottom grid is bound to an entitiView of the entityCollection, this entityView is filtered using a DelegatePredicate that show only the entity instance selected in the upper grid.
code of the entityView
evFascicolo = New EntityView2(Of FascicoloEntity)(Me.bcFascicoli.EntityCollectionGen)
evFascicolo.Filter = New DelegatePredicate(Of FascicoloEntity)(Function(lFascicolo As FascicoloEntity) lFascicolo Is entityFilteredInDetail)
Code for the AfterRowActivate event of the top grid
Private Sub gcLista_AfterRowActivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles gcLista.AfterRowActivate
Try
'get the Entity selected in the upper grid
Dim ent As Object
ent = Me.gcLista.UltraGrid.ActiveRow.ListObject
'set the selecten entity in the parameter used by the entityViewFilter
Me.entityFilteredInDetail = DirectCast(ent, FascicoloEntity)
'force the entityView to refresh itself
Me.evFascicolo.Filter = Me.evFascicolo.Filter
Catch ex As Exception
Log(ex)
End Try
End Sub