How are you populating the two regions? Does your "parent" view explicitly call regionManager.RequestNavigate() on them, or do you "fix" the regions to their views during application startup, using regionManager.RegisterViewWithRegion()?
With the former, your parent view could (say) generate a GUID and pass this to the child views using the context parameter when you call RequestNavigate(). The views can grab this value within OnNavigatedTo(). If you are using EventAggregator your could expose the GUID as a property on the message object, and use the predicate method overload when subscribing, so the graph view only receives messages containing the expected GUID.
If you are using RegisterViewWithRegion, things get more tricky. I know you can set a context value in the region's XAML, so following the GUID idea, and assuming the VM exposes the generated GUID value through a property called MyViewGuid:-
<ContentControl Regions:RegionManager.RegionName="Foo"
Regions:RegionManager.RegionContext="{Binding MyViewGuid}"/>
I've not found an easy way to get that context value to the child view-models (given that their INavigationAware methods don't get called in this scenario). I used a hacky approach - in the child views' constructors, set up an event handler for changes to the parent region's context value:-
var regionContext = RegionContext.GetObservableContext(this);
regionContext.PropertyChanged += RegionContextOnPropertyChanged;
The event handler would be something like this, off the top of my head:-
private void RegionContextOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
var observableObject = sender as ObservableObject<object>;
if (observableObject != null && observableObject.Value != null)
{
// Get the GUID value from the context and pass to the VM
// (assuming the VM has a method called SetGuid().
var myGuid = (Guid)observableObject.Value;
(DataContext as MyViewModel).SetGuid(myGuid);
}
}
Hopefully something I've suggested might be of use...!