Without sample app it's a bit tricky, but from what I can see...
foreach (JobHistory jh in Member.JobHistories)
{
Jobs.Add(jh);
}
OnPropertyChanged("Jobs");
if Jobs is an ObservableCollection then you don't need to raise the PropertyChanged.
basically, it looks like you need to have something like this in the EmplSite setter:
this.EmplSite.Employer.PropertyChanged
+=
delegate(
object sender,
PropertyChangedEventArgs o)
{
if (o.PropertyName ==
"EmployerName") RaisePropertyChanged(
"EmployerName"); };
I think this will check for the contents of the nested object being changed, and reflect that change in your top level object.
You have to remember that your collection doesn't change when the objects are async received from the database, as DF is simply replacing an object into an existing one, not adding or removing objects from the collection.
Also, why do you have a Jobs collection? This is the same as
Member.JobHistories so you can bind straight to that collection.
In fact, you could bypass this whole problem by binding to
Member.EmplSite.Employer.EmployerName in your XAML code, so unless you have a good reason for replicating the property to the top object I would do it this way.