Many thanks for your code and your very quick answer.
Here your code in VB, I translated it wth SharpDevelop.
If it can help VB people.
''' <summary>
''' IChild provides for a means to get a Csla object's parent. Parent is a protected property,
''' so this interface simply provides for a public means to get it.
''' </summary>
Public Interface IChild
''' <summary>
''' Gets the parent object of this object.
''' </summary>
''' <returns>This object's parent.</returns>
Function GetParent() As Object Implements INotifiedView.Initialize
End Interface
'''My business base AND my business list base (inheriting from CSLA objects) implement IChild and provide for GetRootObject.
#Region "IChild Implementation"
''' <summary>
''' Gets the parent object of this object.
''' </summary>
''' <returns>This object's parent.</returns>
Private Function IChild_GetParent() As Object Implements IChild.GetParent
Return Me.Parent
End Function
#End Region
''' <summary>
''' Gets the current object's root object.
''' </summary>
''' <returns>The current object's root object.</returns>
Public Function GetRootObject() As Object
Dim index As Object = Me
While TypeOf index Is IChild AndAlso DirectCast(index, IChild).GetParent() IsNot Nothing
index = DirectCast(index, IChild).GetParent()
End While
Return index
End Function