W/o seeing your code it's gonna be impossible for me to tell. In TempHire the phone numbers are kept in a BindableCollection of StaffingResourcePhoneItemViewModels. During VM initialization, the collection is populated from the phone number navigation property and then the VM listens to the CollectionChanged event of the navigation property to keep the BindableCollection in sync with the navigation property. If you follow the same model, then perhaps you got a bug in the CollectionChanged event handler. Also make sure that you unhook properly from the CollectionChanged event, so you don't have memory leaks and don't react to events from previous entities. The following is the code from TempHire, that keeps the collection in sync.
private void PhoneNumbersCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.OldItems != null)
{
foreach (var item in
e.OldItems.Cast<PhoneNumber>().Select(p => PhoneNumbers.First(i => i.Item == p)))
{
PhoneNumbers.Remove(item);
item.Dispose();
}
}
if (e.NewItems != null)
e.NewItems.Cast<PhoneNumber>()
.ForEach(p => PhoneNumbers.Add(new StaffingResourcePhoneItemViewModel(p, EditMode)));
EnsureDelete();
}